Save Data to .plist File in Swift
Apparently the file is not in a writable location, so I created it in the documents directory.
var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as Stringvar path = paths.stringByAppendingPathComponent("data.plist")var fileManager = NSFileManager.defaultManager()if (!(fileManager.fileExistsAtPath(path))){ var bundle : NSString = NSBundle.mainBundle().pathForResource("data", ofType: "plist") fileManager.copyItemAtPath(bundle, toPath: path, error:nil)}data.setObject(object, forKey: "object")data.writeToFile(path, atomically: true)
Then, it has to be read from the documents directory.
var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as Stringvar path = paths.stringByAppendingPathComponent("data.plist")let save = NSDictionary(contentsOfFile: path)
Swift 3:
func loadData() { let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as NSArray let documentDirectory = paths[0] as! String let path = documentDirectory.appending("myData.plist") let fileManager = FileManager.default if(!fileManager.fileExists(atPath: path)){ if let bundlePath = Bundle.main.path(forResource: "myData", ofType: "plist"){ let result = NSMutableDictionary(contentsOfFile: bundlePath) print("Bundle file myData.plist is -> \(result?.description)") do{ try fileManager.copyItem(atPath: bundlePath, toPath: path) }catch{ print("copy failure.") } }else{ print("file myData.plist not found.") } }else{ print("file myData.plist already exits at path.") } let resultDictionary = NSMutableDictionary(contentsOfFile: path) print("load myData.plist is ->\(resultDictionary?.description)") let myDict = NSDictionary(contentsOfFile: path) if let dict = myDict{ myItemValue = dict.object(forKey: myItemKey) as! String? txtValue.text = myItemValue }else{ print("load failure.") }}
Check in Xcode 10 swift 4.1
//TODO: for wtite in .plist file let docsBaseURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! let customPlistURL = docsBaseURL.appendingPathComponent("custom.plist") print(customPlistURL.absoluteString) let dic:[String:Any] = ["key":"val"] // Swift Dictionary To Data. do { let data = try PropertyListSerialization.data(fromPropertyList: dic, format: PropertyListSerialization.PropertyListFormat.binary, options: 0) do { try data.write(to: customPlistURL, options: .atomic) print("Successfully write") }catch (let err){ print(err.localizedDescription) } }catch (let err){ print(err.localizedDescription) }