Ограничения NSMutableData для NSKeyedUnarchiver - PullRequest
2 голосов
/ 27 июня 2011

Я прочитал в другом посте ( Архивирование / Разархивирование результатов в непонятном архиве initForReadingWithData ), что вы не можете хранить более 250 КБайт в NSMutableArray.К сожалению, чтобы восстановить такие данные с помощью NSKeyedUnarchiver, вы должны использовать NSMutableArray.Я пытаюсь вернуть изображение размером около 500 КБ.

  MTMessage *message = [NSKeyedUnarchiver unarchiveObjectWithData:data];

Я получаю ошибку:

Завершение работы приложения из-за необработанного исключения 'NSInvalidArgumentException', причина:'*** - [NSKeyedUnarchiver initForReadingWithData:]: непонятный архив (0x0, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x0, 0x1)'

Видимо, это довольно распространенная ситуация (хотяя еще не нашел решение).Будете ли вы иметь представление о том, как обойти использование NSMutableData.Спасибо.

РЕДАКТИРОВАТЬ: На самом деле он говорит, что данные имеют размер 524 288 байт, и это правильно, поэтому проблема может исходить от unarchiver.

1 Ответ

3 голосов
/ 27 июня 2011

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

Пожалуйста, предоставьте больше кода для более глубокого понимания вашей актуальной проблемы. Возможно, вы пытаетесь разархивировать закодированное изображение вместо архива?

...