建议采取的路径:Coredata vs NSDefault

时间:2015-07-25 02:05:30

标签: ios core-data nsuserdefaults

我目前正在尝试使用CoreDataNSUserDefaults之间做出决定。我试图存储两个数组,并能够删除和写入它们。根据我的研究,NSUserDefaults只允许NSArray s,这意味着一旦创建它我就无法更改它们。但是,我认为解决这个问题的方法是简单地保存数组中的所有数据,删除它,然后将其重新保存为新数组。思考?

2 个答案:

答案 0 :(得分:1)

有3个保存数据的选项

  • NSUSerDefault
  • 文件系统
  • 核心数据

<强> 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可以使用FileManagerNSURL

来处理路径
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,因此您无法将其视为要使用的普通数据库。基于以上几点,您可以根据需要选择使用的内容。