2

我读过另一篇文章(归档/取消归档导致 initForReadingWithData 无法理解的归档),您不能在 NSMutableArray 上存储超过 250kBytes。不幸的是,为了使用 NSKeyedUnarchiver 恢复此类数据,您必须使用 NSMutableArray。我正在尝试取回大小约为 500kB 的图像。

  MTMessage *message = [NSKeyedUnarchiver unarchiveObjectWithData:data];

我得到的错误是:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** - [NSKeyedUnarchiver initForReadingWithData:]:无法理解的存档(0x0、0x10、0x4a、0x46、0x49、0x46、0x0、0x1)”

显然这是一种很常见的情况(尽管我还没有找到解决方案)。你知道如何绕过 NSMutableData 的使用吗?谢谢你。

编辑:实际上它说数据的大小为 524 288 字节,这是正确的,因此问题可能来自取消存档程序。

4

1 回答 1

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

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

于 2011-06-27T16:59:42.027 回答