2010-10-17 1 views
3

У меня возникли проблемы с получением сохраненного NSMutableArray, содержащего настраиваемый объект. Сбой приложения и отчеты консоли http://pastie.org/1226822. Вот мои объекты .h файл http://pastie.org/1226823. Вот мои объекты .m файл http://pastie.org/1226826. Вот как я сохраняю свои данные http://pastie.org/1226830. Вот как я извлекаю свои данные http://pastie.org/1226831. Заранее спасибо.Сохранение NSMutableArray в NSUserDefaults с использованием NSKeyedArchiver

+0

только что пробовал, что работает отлично для меня. без сбоев. –

ответ

8

Исправлено. Я использовал код Брэда Ларсона в Storing custom objects in an NSMutableArray in NSUserDefaults. Я думаю, что возникла проблема с тем, как я добавил данные обратно в свой массив, но теперь он работает.

NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"savedArray"]; 
if (dataRepresentingSavedArray != nil) 
{ 
    NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray]; 
    if (oldSavedArray != nil) 
      objectArray = [[NSMutableArray alloc] initWithArray:oldSavedArray]; 
    else 
      objectArray = [[NSMutableArray alloc] init]; 
} 
+1

Вы также можете написать objectArray = [oldSavedArray mutableCopy] – benzado

1

Консоль сообщает вам всю проблему. Ваш Assignment объект не реализует метод initWithCoder:

'NSInvalidArgumentException', reason: '-[Assignment initWithCoder:]: unrecognized selector sent to instance 0x5f04090' 

KeyArchiver будет вызывать класс инициализировать новый объект на основе декодирования данных. Вы должны использовать [decoder objectForKey:YOUR_KEY];

+0

Я реализую его. [декодер objectForKey: YOUR_KEY]; недоступно. – enbr

1

Проблема не в NSMutableArray или как вы вызываете NSKeyedArchiver. Проблема в том, что объекты внутри массива сами не являются архивируемыми.

Вам нужны ваши объекты для реализации протокола NSCoding. Существует много документации о том, как это сделать, но в основном вы просто добавляете метод initWithCoder: для создания объекта из архива и метод encodeWithCoder: для записи объекта в архив. Кусок пирога!

+0

Я реализовал его, но он все еще не работает. – enbr

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

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