Ios 关于路径的建议:Coredata vs NSDefault

Ios 关于路径的建议:Coredata vs NSDefault,ios,core-data,nsuserdefaults,Ios,Core Data,Nsuserdefaults,我目前正试图在使用CoreData和NSUserDefaults之间做出选择。我试图存储两个数组,并能够删除和写入它们。根据我的研究,NSUserDefaults只允许NSArrays,这意味着一旦它们被创建,我就无法更改它们。但是,我认为解决这个问题的一种方法是简单地保存数组中的所有数据,将其删除,然后将其重新保存为新数组。想法 实际上,NSUserDefault的作用与您的iDevice中的设置应用程序一样。它用于存储一些设置数据,而不是作为数据库。由于它类似于字典的语法,许多开发人员使用它

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

实际上,
NSUserDefault
的作用与您的iDevice中的设置应用程序一样。它用于存储一些设置数据,而不是作为数据库。由于它类似于字典的语法,许多开发人员使用它方便地存储小块数据,而不是存储苹果建议的设置数据。NSUserDefault的设计不适合处理繁重的I/O,因此不能将其视为正常的数据库使用。基于以上几点,您可以根据需要选择要使用的内容。

有3个选项可用于保存数据

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

用于存储用户偏好数据。这是一个键值存储。这不是一个安全的地方,很容易进入。不要在这里存储任何敏感数据

文件系统

非常简单和灵活的数据存储。可以使用将自定义对象保存到文件。NSArray有一种将其对象保存到文件的方法

核心数据

核心数据是一个数据库。它是所有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
stringByAppendingPathComponent
在Swift 2.0中不推荐使用
使用
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)

NSUserDefaults
和核心数据之间进行选择应该很简单
NSUserDefaults
用于存储用户首选项之类的小块数据。核心数据是用于管理大量数据的数据库系统。如果只有几个字符串要保存,请使用
NSUserDefaults
。如果要维护大量数据,那么就需要核心数据。如果您有介于两者之间的内容,请查看plists或JSON文件。谢谢。为了澄清一下,为了重写数组,我只需将数组设置为新值?另外,file.plist是存储数组的文件吗?是,它存储在文档目录中的file.plist中。要重写数据,只需再次调用save,它将替换文件的内容Hey Kostiantyn您是否可以将其更新为Swift 2.0?我花了最后一天的时间试图转换它,但运气不好。非常感谢。你好@SnarfSnarf我添加了Swift 2.0示例