NSKeyedArchiver 保存啥格式?
Posted
技术标签:
【中文标题】NSKeyedArchiver 保存啥格式?【英文标题】:What format does NSKeyedArchiver save?NSKeyedArchiver 保存什么格式? 【发布时间】:2011-01-27 17:17:06 【问题描述】:当我使用 NSKeyedArchiver 是写入 *.plist 的数据时,我见过一些示例,人们将输出文件保存为 *.txt 甚至根本没有扩展名?
-(void)saveCore
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:reactorCore forKey:@"CORE"];
[archiver finishEncoding];
[data writeToFile:[self dataFilePath] atomically:YES];
[data release];
[archiver release];
加里
【问题讨论】:
@JasonCoco 不正确。请参阅 Ole Begemann 的回答。 @JonaChristopherSahnwaldt 这是真的。生成的数据是二进制 plist 数据,其结构方式是完全专有的。是的,您可以将此二进制 plist 数据转换为其他内容,例如 xml plist,但它不会降低 plist 的组织方式的专有性,也不意味着您可以采用任何给定的形式。如果他们想要并且过去有,它可以很容易地在版本之间进行更改。 @JasonCoco 我不明白你所说的“二进制 plist”是什么意思。我以为您的意思是二进制文件格式,而 XML 不是二进制格式。据我所知,plist XML 格式从它的概念开始就没有改变过。 嗯,@JasonCoco 说得对,NSKeyedArchiver 编写的数据很难解释。这是因为虽然它可以以可读的 plist 或 xml 格式编写,但内容仍然是神秘的,即不是直接的键值排列。相反,它采用内部和未记录的格式。不过,它不太可能发生变化(发生的变化是从无键格式变为有键格式,但这也需要使用新的 API)。 存档键和值的实际格式在一定程度上是这里的文档:mac4n6.com/blog/2016/1/1/… 【参考方案1】:您可以使用任何您想要的文件扩展名。它与 NSKeyedArchiver 使用的实际文件格式完全无关。默认情况下,存档将是二进制形式,但如果将存档器的outputFormat
属性设置为NSPropertyListXMLFormat_v1_0
,它将写入一个XML plist。当你这样做时,你可能应该给你的文件一个 .plist 或 .xml 扩展名。
【讨论】:
谢谢 Ole,非常感谢。 这是 100% 正确的。请注意,如果您在 TextMate 中打开二进制 plist 文件,它会自动转换为 ASCII(顶部带有“!!! BINARY PROPERTY LIST WARNING !!!”)......这可能会让您感到困惑。跨度> BBEdit 可以使二进制 plist (.plist) 像 XML plist 一样可读。这样,您可以将数据保存到 .plist 文件中并在 BBEdit 中打开以读取它。尽管如此,内容还是很难理解。以上是关于NSKeyedArchiver 保存啥格式?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将带有 NSKeyedArchiver 的 NSMutableArray 保存到核心数据中?
使用 NSKeyedArchiver 将 NSMutableArray 保存到 NSUserDefaults