【问题标题】:How to save an NSDictionary with NSValue objects to a file如何将带有 NSValue 对象的 NSDictionary 保存到文件中
【发布时间】: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 呢?)

标签: objective-c nsdictionary


【解决方案1】:

你可以把它写成一个属性列表,但是你需要用例如替换 NSNumber 键。字符串和 NSValue 对象必须是“家族的一部分”。如果您可以通过这些要求,这是一个不错的选择,您应该认真考虑。

然后就可以加载了

dict = [NSDictionary dictionaryWithContentsOfURL...

并保存

[dict writeToUrl...

这很好,很简单,没有当今 NSSecureCoding 的复杂性。

否则,您需要深入研究密钥归档器并确保密钥和对象都实现 NSCoding / NSSecureCoding。即使在这里,它也可以很快成为一项任务,但它是具有自定义对象的字典的“正常”路线。编辑:如果你使用 NSString 和 NSNumber 你应该没有问题。

但是,如果您有自定义对象,例如您的值是一些不实现 NSCoding 的奇怪东西,那么您必须查阅文档中的 Archives and Serializations Programming Guide。无论如何,您都可以去那里选择这些选项中的任何一个,但目前最简单的可能是第一个?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-29
    • 2012-03-27
    • 2011-10-16
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2011-04-07
    相关资源
    最近更新 更多