传递nil到archivedDataWithRootObject返回奇怪的NSData

时间:2014-04-10 14:06:41

标签: ios objective-c plist nskeyedarchiver

我的代码中的某处

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:someArray];

如果datanil,我希望someArraynil,但会返回一些我不理解的数据。

我打印出来如下 <62706c69 73743030 d4010203 0405080a 0b542474 6f705824 6f626a65 63747358 24766572 73696f6e 59246172 63686976 6572d106 0754726f 6f748000 a1095524 6e756c6c 12000186 a05f100f 4e534b65 79656441 72636869 76657208 11161f28 32353a3c 3e444900 00000000 00010100 00000000 00000c00 00000000 00000000 00000000 00005b>

我尝试NSData *data = [NSKeyedArchiver archivedDataWithRootObject:nil];以确保参数肯定是零。

我阅读了文档,但没有找到任何解释。

那究竟发生了什么?

修改 我将数据写入文件,结果是这样的plist。它可能是NSKeyedArchiver存储对象的方式。

nil plist file

1 个答案:

答案 0 :(得分:7)

该数据看起来像一个“空”的plist。您可以将其转换为字符串并记录以检查自己。由于归档程序使用set格式,因此您将始终获得数据包装。

从技术上讲,它可以编码,以便没有必要,但你无法控制它。

如果您不需要存储nil或空源数组的存档,那么您的代码应检查并不执行存档(并在需要时删除任何现有的存档文件)。