2011-06-27 10 views
2

NSMutableArrayに250kBytes以上を格納できない別の投稿(Archiving/Unarchiving results in initForReadingWithData incomprehensible archive)を読んでいます。残念ながら、NSKeyedUnarchiverでこのようなデータを復元するには、NSMutableArrayを使用する必要があります。私は約500kBのサイズの画像を取り戻そうとしています。NSKeyedUnarchiverのNSMutableDataの制限

MTMessage *message = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

私が手にエラーがある:「*** - [NSKeyedUnarchiver initForReadingWithData::]:キャッチされない例外により 'NSInvalidArgumentException'、理由にアプリを終了

不可解なアーカイブ(0x0の、0x10を、0x4a 、0x46、0x49、0x46、0x0、0x1) '

明らかにそれはかなり一般的な状況です(まだ解決策は見つかりませんでしたが)。 NSMutableDataの使用をバイパスする方法を知っていますか? ありがとうございます。

EDIT:実際には、データは524 288バイトのサイズであると言われています。これは正しいので、問題はunarchiverから来る可能性があります。

+0

はい、下記のように、これらのバイトはアーカイブではなくJFIF/JPEGイメージであることを示しています。 – Rob

答えて

3

NSKeyedArchiverは、NSArray(不変かどうか)に依存しません。

私はまた、NSKeydArchiverと関連したバグとアーカイブサイズにも気づいていません。

次のコードは、ライオンに細かい動作します:

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

あなたの実際の問題でより多くの洞察力のために多くのコードを入力してください。おそらくアーカイブの代わりにエンコードされたイメージを解凍しようとしていますか?

+0

あなたは非常に正しいです!データはすでに画像だったため、アーカイブを解凍する必要はありませんでした。結局、私は単にimageWithDataをしました。ありがとうございました ! – Plot