У меня возникли проблемы с получением сохраненного 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
ответ
Исправлено. Я использовал код Брэда Ларсона в 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];
}
Вы также можете написать objectArray = [oldSavedArray mutableCopy] – benzado
Консоль сообщает вам всю проблему. Ваш Assignment
объект не реализует метод initWithCoder:
'NSInvalidArgumentException', reason: '-[Assignment initWithCoder:]: unrecognized selector sent to instance 0x5f04090'
KeyArchiver будет вызывать класс инициализировать новый объект на основе декодирования данных. Вы должны использовать [decoder objectForKey:YOUR_KEY];
Я реализую его. [декодер objectForKey: YOUR_KEY]; недоступно. – enbr
Проблема не в NSMutableArray или как вы вызываете NSKeyedArchiver. Проблема в том, что объекты внутри массива сами не являются архивируемыми.
Вам нужны ваши объекты для реализации протокола NSCoding. Существует много документации о том, как это сделать, но в основном вы просто добавляете метод initWithCoder:
для создания объекта из архива и метод encodeWithCoder:
для записи объекта в архив. Кусок пирога!
Я реализовал его, но он все еще не работает. – enbr
только что пробовал, что работает отлично для меня. без сбоев. –