NSKeyedUnarchiver表现不尽如人意

时间:2012-01-11 11:00:34

标签: iphone ios macos nskeyedarchiver

我在NSKeyedUnarchiver中遇到了一个奇怪的行为。

我归档了一个数据,对于这个例子,我只使用一个字符串:

NSMutableData       *myData = [ NSMutableData data ];
NSKeyedArchiver     *archiver = [[ NSKeyedArchiver alloc ] initForWritingWithMutableData:myData ];
NSString            *testString = [ NSString stringWithString:@"Hello World!" ];
[ archiver encodeObject:testString forKey:@"test" ];
[ archiver finishEncoding ];

然后我想取消归档它。如果我使用

NSKeyedUnarchiver  *unarchiver = [ NSKeyedUnarchiver unarchiveObjectWithData:myData ];
NSString     *result = [ unarchiver decodeObjectForKey:@"test" ];

我得到零结果,但如果我使用:

NSKeyedUnarchiver  *unarchiver = [[ NSKeyedUnarchiver alloc ] initForReadingWithData:myData ];
NSString     *result = [ unarchiver decodeObjectForKey:@"test" ];

我收回了我的字符串。现在我认为[NSKeyedUnarchiver unarchiveObjectWithData:myData]只是[[NSKeyedUnarchiver alloc] initForReadingWithData:myData]的一种方便方法,但它似乎没有这样做。我错了。

由于 礼

1 个答案:

答案 0 :(得分:2)

unarchiveObjectWithData

Apple:“解码并返回先前由NSKeyedArchiver编码并存储在给定NSData对象中的对象图。”

这意味着它取消归档一个完整的类,而不是准备取消归档单个对象。

initForReadingWithData

Apple:“初始化接收器,用于解码先前由NSKeyedArchiver编码的存档。

返回:为解码数据而初始化的NSKeyedUnarchiver对象。“

这意味着只需初始化一个准备接受解压缩方法调用的非归档器。