Как сохранить свой собственный объект с помощью NSKeyedArchiver? - PullRequest
0 голосов
/ 05 сентября 2010

У меня проблемы с использованием NSKeyedArchiver / NSKeyedUnarchiver для сохранения моего объекта.
Я добавил методы - (id)initWithCoder:(NSCoder *)decoder и - (void)encodeWithCoder:(NSCoder *)encoder.Проблема в том, что когда я пытаюсь сохранить объект, он не работает правильно.
Я мог представить проблему (но я не уверен, что это проблема;)).У меня есть несколько массивов в моем объекте.Они содержат больше объектов (я также реализовал оба метода «Кодер»).Так что массив вызывает методы в своих объектах?

Любое возможное решение ??

Спасибо !!

1 Ответ

5 голосов
/ 05 сентября 2010

В заголовочном файле укажите, что ваш класс будет реализовывать протокол NSCoding, например <NSCoding>

В методе encodeWithCoder вам необходимо закодировать все поля, которые вы хотите сохранить, следующим образом:

[encoder encodeObject:array1 forKey:@"array1"];

Затем в методе initWithCoder декодируйте поля, которые были закодированы:

array1 = [coder decodeObjectForKey:@"array1"];

Убедитесь, что любые закодированные контейнеры содержат только объекты, которые также реализуют протокол NSCoding. Это могут быть базовые классы, такие как NSString, NSNumber, NSArray, NSDictionary, а также ваш собственный объект.

Если ваш проект не использует сборку мусора, вам нужно сохранить или скопировать данные, извлеченные из архива, например:

array1 = [[coder decodeObjectForKey:@"array1"] retain];
...