2010-09-04 2 views
0

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

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

Спасибо!

+0

Вы уверены, что все объекты, которые вы пытаетесь архив долгосрочного хранения? У меня нет списка, но в основном это примитивы. NSString, NSNumber, NSValue и еще несколько. –

+0

Вы использовали 'encodeObject: forKey:' для кодирования в файле с ключом? – asandroq

ответ

5

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

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

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

Тогда в методе initWithCoder, декодировать поля, которые были закодированные:

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

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

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

array1 = [[coder decodeObjectForKey:@"array1"] retain]; 
+0

Спасибо большое !!! –

+0

Ну ... теперь у меня есть следующая проблема: как я могу действовать, когда у меня есть объект, унаследованный другим моим объектом. Один работал хорошо, но как только я наследую его, он не работает. –

+0

- (id) initWithCoder: (NSCoder *) coder {if (self = [super initWithCoder: coder]) { –

 Смежные вопросы

  • Нет связанных вопросов^_^