如何将带有 NSValue 对象的 NSDictionary 保存到文件中
Posted
技术标签:
【中文标题】如何将带有 NSValue 对象的 NSDictionary 保存到文件中【英文标题】:How to save an NSDictionary with NSValue objects to a file 【发布时间】:2020-08-04 17:01:00 【问题描述】:我有一个平面 NSDictionary,其中键作为 NSNumber 对象,值作为 NSValue 对象。如何将其保存到文件中?
我尝试将字典直接写入文件并归档到 NSData,但都失败了。
// Try 1: Archive
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dictionary];
// Try 2: Write to file
[dictionary writeToFile:filePath atomically:YES];
NSValue 对象包含字符串指针。
[NSValue valueWithPointerString:text];
【问题讨论】:
为什么要用NSValue
封装NSString
对象?你有错误吗?使用writeToFile:options:error:
来获得更明确的错误(而不是 bool 呢?)
【参考方案1】:
你可以把它写成一个属性列表,但是你需要用例如替换 NSNumber 键。字符串和 NSValue 对象必须是“家族的一部分”。如果您可以通过这些要求,这是一个不错的选择,您应该认真考虑。
然后就可以加载了
dict = [NSDictionary dictionaryWithContentsOfURL...
并保存
[dict writeToUrl...
这很好,很简单,没有当今 NSSecureCoding 的复杂性。
否则,您需要深入研究密钥归档器并确保密钥和对象都实现 NSCoding / NSSecureCoding。即使在这里,它也可以很快成为一项任务,但它是具有自定义对象的字典的“正常”路线。编辑:如果你使用 NSString 和 NSNumber 你应该没有问题。
但是,如果您有自定义对象,例如您的值是一些不实现 NSCoding 的奇怪东西,那么您必须查阅文档中的 Archives and Serializations Programming Guide。无论如何,您都可以去那里选择这些选项中的任何一个,但目前最简单的可能是第一个?
【讨论】:
以上是关于如何将带有 NSValue 对象的 NSDictionary 保存到文件中的主要内容,如果未能解决你的问题,请参考以下文章