NSKutableed对NSKeyedUnarchiver的限制

时间:2011-06-27 12:58:28

标签: objective-c nskeyedarchiver

我已阅读另一篇文章(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。

1 个答案:

答案 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]]);

请提供更多代码,以便更深入地了解您的实际问题。您是否可能尝试取消归档编码图像而不是存档?