2011-06-27 43 views
2

我已閱讀另一篇文章(Archiving/Unarchiving results in initForReadingWithData incomprehensible archive),您不能在NSMutableArray上存儲超過250kBytes。不幸的是,爲了用NSKeyedUnarchiver恢復這些數據,你必須使用NSMutableArray。我試圖找回大小約500kB的圖像。對於NSKeyedUnarchiver的NSMutableData的限制

MTMessage *message = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

我得到的錯誤是:

終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因:「*** - [NSKeyedUnarchiver initForReadingWithData:]:難以理解的存檔(爲0x0,爲0x10,0x4a ,0x46,0x49,0x46,0x0,0x1)'

顯然這是一個很常見的情況(儘管我還沒有找到解決方案)。你有任何想法如何繞過使用NSMutableData。 謝謝。

編輯:其實它說,數據有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