2

NSMutableArrayに250kバイトを超えて保存することはできないという別の投稿(アーカイブ/アーカイブ解除の結果はinitForReadingWithDataの理解できないアーカイブになります)を読みました。残念ながら、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

NSKeyedArchiverNSArray(不変かどうか)に依存しません。

また、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 に答える