NSKeyedUnarchiver падает после декодирования массива - PullRequest
0 голосов
/ 07 сентября 2010

У меня очень неприятная проблема.
Когда я пытаюсь освободить объект NSKeyedUnarchiver после декодирования NSArray, возникает ошибка «EXC_BAD_ACCESS».
Но когда я не освобождаю его или не декодирую другой объект (например, NSString), всеидти хорошо.
Я не понимаю этого ... Для меня это выглядит как метод decodeObjectForKey изменяет что-то в объекте декодера (но не всегда ?!).И в отладчике единственная переменная, которая изменяется после вызова этого метода, это "_replacementMap".Но я понятия не имею, как исправить эту ошибку.
Надеюсь, вы мне поможете.
Вот пример кода:

+ (NSArray *)decodeArticles {
NSString *archivePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"Articles.archive"];
NSData *decoderData = [[NSData alloc] initWithContentsOfFile:archivePath];
NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:decoderData];

NSArray *savedArticles = [[decoder decodeObjectForKey:@"articles"] copy];
if (!savedArticles) {
    savedArticles = [[NSArray alloc] init];
}

[decoder finishDecoding];
//[decoder release];

return savedArticles;

}

1 Ответ

0 голосов
/ 21 октября 2010

Еще несколько вещей: 1. необходимо освободить decoderData;должен быть в состоянии сделать это после инициализации декодера;думаю, статический анализатор должен указать на это.2. попробуйте переместить [декодер finishDecoding];[выпуск декодера];до 3. в блоке if соглашение могло бы предложить вам вернуть автоматически освобожденный объект, так как реализация является методом класса.Вы можете рассмотреть возможность добавления аргумента пути к методу.4. измените копию на авто-релиз.5. объекты в вашем массиве могут определенно влиять на процесс кодирования.что может объяснить, почему некоторые «стандартные» объекты кодируют и декодируют так, как вы ожидаете.

...