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 会变慢的主要内容,如果未能解决你的问题,请参考以下文章
如何将 swift Dictionary 转换为 NSDictionary
嵌套的 JSON 数据将导致使用 NS 字典(在 Swift 中)崩溃
Swift - 无法将“__NSCFString”类型的值转换为“NSDictionary”