我在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]的便捷方法,但它似乎并不以这种方式运行。我错了吗。
谢谢
礼萨
最佳答案
unarchiveObjectWithData
苹果公司:“解码并返回先前由NSKeyedArchiver编码并存储在给定NSData对象中的对象图。”
这意味着它将取消存档一个完整的类,而不是准备取消存档单个对象。initForReadingWithData
苹果公司:“初始化接收器以解码先前由NSKeyedArchiver编码的档案。
返回:初始化用于解码数据的NSKeyedUnarchiver对象。”
这意味着仅初始化准备接受非归档方法调用的非归档器。