Swift:将 NSDictionary 保存到文件中,因为 NSUserDefaults 会变慢

Posted

技术标签:

【中文标题】Swift:将 NSDictionary 保存到文件中,因为 NSUserDefaults 会变慢【英文标题】:Swift: Saving NSDictionary to a file, because NSUserDefaults is to slow 【发布时间】:2014-12-01 13:23:27 【问题描述】:

我正在使用 NSUserDefaults 来保存更多的 10 个大 NSDictionary。

因为性能很慢,我想将数据保存到一个 [或 10 个文件] 中,而不是使用 NSUserDefaults。我只是在应用程序启动时才需要数据,所以我的想法是,将数据保存到文件中并仅将我需要的数据快速保存到 NSUserDefaults 中。

我在堆栈溢出时找到了这个解决方案: Read and write data from text file

let dirs : [String]? = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) as? [String]
if ((dirs) != nil) 
    let dir = dirs![0]; //documents directory
    let path = dir.stringByAppendingPathComponent(file);
    let text = "some text"

    //writing
    text.writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: nil);

    //reading
    let text2 = String(contentsOfFile: path, encoding: NSUTF8StringEncoding, error: nil)

这适用于字符串。但是当我尝试使用

NameOfMyDict.writeToFile

我收到一个错误,因为字典没有 writeToFile 函数。

如何将字典保存到文件中?

【问题讨论】:

也许你应该使用CoreData 【参考方案1】:

NSDictionary 提供了保存到文件的功能。它是Foundation 框架的一部分:

writeToFile(_ path: String, atomically flag: Bool) -> Bool

如果您使用 swift Dictionary<>,您可能需要转换为 NSDictionary。字典的所有元素都应该实现NSCoding 协议。

【讨论】:

【参考方案2】:

您可以将其序列化为 JSON 并将 JSON 字符串保存到文件中。见NSJSONSerialization。

【讨论】:

以上是关于Swift:将 NSDictionary 保存到文件中,因为 NSUserDefaults 会变慢的主要内容,如果未能解决你的问题,请参考以下文章

将 NSDictionary 转换为 Swift 字典

如何将 swift Dictionary 转换为 NSDictionary

嵌套的 JSON 数据将导致使用 NS 字典(在 Swift 中)崩溃

Swift - 无法将“__NSCFString”类型的值转换为“NSDictionary”

将 NSDictionary 与内部函数解码为 swift 对象的值

将 NSARRAY 转换为 NSDictionary 以用作 JSON 序列化 swift4 Xcode 9 [关闭]