我已阅读另一篇文章(Archiving / Unarchiving results in initForReadingWithData incomprehensible archive),您无法在NSMutableArray上存储超过250kBytes。不幸的是,为了使用NSKeyedUnarchiver恢复此类数据,您必须使用NSMutableArray。我试图找回一个大小约为500kB的图像。
MTMessage *message = [NSKeyedUnarchiver unarchiveObjectWithData:data];
我得到的错误是:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'*** - [NSKeyedUnarchiver initForReadingWithData:]:难以理解的存档(0x0,0x10,0x4a,0x46,0x49,0x46,0x0,0x1)'
显然这是一种非常常见的情况(即使我还没有找到解决方案)。您是否知道如何绕过使用NSMutableData。 谢谢。
编辑:实际上它说数据的大小为524 288字节,这是正确的,因此问题可能来自unarchiver。
答案 0 :(得分:3)
NSKeyedArchiver
不依赖于NSArray
(不可变或不可变)。
我也不知道与NSKeydArchiver相关的错误并且取决于存档大小。
以下代码在Lion上正常运行:
NSMutableData *data = [NSMutableData data];
for (uint32_t i = 0; i < 1024 * 1024; ++i)
[data appendBytes:&i length:sizeof(uint32_t)];
NSData *archive = [NSKeyedArchiver archivedDataWithRootObject:[NSMutableArray arrayWithObject:data]];
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:archive];
assert([data isEqual:[array lastObject]]);
请提供更多代码,以便更深入地了解您的实际问题。您是否可能尝试取消归档编码图像而不是存档?