我在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]的一种方便方法,但它似乎没有这样做。我错了。
由于 礼
答案 0 :(得分:2)
unarchiveObjectWithData
Apple:“解码并返回先前由NSKeyedArchiver编码并存储在给定NSData对象中的对象图。”
这意味着它取消归档一个完整的类,而不是准备取消归档单个对象。
initForReadingWithData
Apple:“初始化接收器,用于解码先前由NSKeyedArchiver编码的存档。
返回:为解码数据而初始化的NSKeyedUnarchiver对象。“
这意味着只需初始化一个准备接受解压缩方法调用的非归档器。