我目前正在尝试使用CoreData
与NSUserDefaults
之间做出决定。我试图存储两个数组,并能够删除和写入它们。根据我的研究,NSUserDefaults
只允许NSArray
s,这意味着一旦创建它我就无法更改它们。但是,我认为解决这个问题的方法是简单地保存数组中的所有数据,删除它,然后将其重新保存为新数组。思考?
答案 0 :(得分:1)
有3个保存数据的选项
<强> NSUSerDefault 强>
旨在存储用户偏好数据。它是一个键值存储。这不是一个安全的地方,并且很容易访问它。不要在这里存储任何敏感数据。
文件系统
非常简单灵活的数据存储。您可以使用NScoding将自定义对象保存到文件。 NSArray有一种将其对象保存到文件的方法 NSArray writeToFile:
核心数据
核心数据是一个数据库。它是所有3个选项中最复杂,最强大的数据存储。它允许您创建数据库方案,模型,运行查询和执行其他操作。
在您的情况下,我会选择文件系统,将数据保存到文件中。
Swift 1.2
let documents = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String
let filePath = documents.stringByAppendingPathComponent("file.plist")
let array: NSArray = [1, 2, 3]
let res = array.writeToFile(filePath, atomically: true)
let array2 = NSArray(contentsOfFile: filePath)
Swift 2.0
Swift 2.0中不推荐使用stringByAppendingPathComponent
有一个更好的API可以使用FileManager
和NSURL
let documents = NSFileManager.defaultManager().URLsForDirectory(.DocumentationDirectory, inDomains: .UserDomainMask)[0]
let fileUrl = documents.URLByAppendingPathComponent("file.plist")
let array: NSArray = [1, 2, 3]
let res = array.writeToURL(fileUrl, atomically: true)
let array2 = NSArray(contentsOfURL: fileUrl)
答案 1 :(得分:0)
实际上,NSUserDefault
的目的就像是来自iDevice的设置应用。它用于存储一些设置数据而不是数据库。由于它的字典类似语法,有许多开发人员使用它来方便地存储小块数据,而不是存储Apple建议的设置数据。 NSUserDefault
的设计不适用于处理繁重的I / O,因此您无法将其视为要使用的普通数据库。基于以上几点,您可以根据需要选择使用的内容。