Как сохранить свой собственный объект с NkkeedArchiver?
-
30-09-2019 - |
Вопрос
У меня проблемы с использованием NskeeDarkiver / NskeyeDunarchiver для сохранения моего объекта.
Я добавил методы - (id)initWithCoder:(NSCoder *)decoder
а также - (void)encodeWithCoder:(NSCoder *)encoder
. Отказ Проблема в том, что когда я пытаюсь сохранить объект, он не работает правильно.
Я мог себе представить проблему (но я не уверен, если это проблема;)). У меня есть несколько массивов внутри моего объекта. Они содержат больше объектов (я также реализовал как «Coder» - Methods, а также). Так что массив вызывает методы в своих объектах?
Любое возможное решение ??
Спасибо!!
Решение
В заголовочном файле укажите, что ваш класс будет реализовывать NSCoding
Протокол, вроде <NSCoding>
в encodeWithCoder
Метод необходимо кодировать все поля, которые вы хотите сохранить так:
[encoder encodeObject:array1 forKey:@"array1"];
Тогда в initWithCoder
Метод, декодируют поля, которые были закодированы:
array1 = [coder decodeObjectForKey:@"array1"];
Убедитесь, что любые закодированные контейнеры содержат только объекты, которые также реализуют NSCoding
протокол. Это могут быть основные классы, такие как NSString
, NSNumber
, NSArray
, NSDictionary
, а также ваш собственный пользовательский объект.
Если ваш проект не использует сборку мусора, вам необходимо сохранить или скопировать данные, полученные из архива, как так:
array1 = [[coder decodeObjectForKey:@"array1"] retain];