Как сохранить результаты Fetch в файле plist приложения? - PullRequest
0 голосов
/ 04 октября 2010

Я запрашиваю строки из моей базы данных sqlite с помощью Fetch и загружаю результаты в NSMutableArray myDataArray. То, что я хочу сделать, это сохранить значения в myDataArray в файл списка настроек моего приложения. Но когда я запускаю приведенный ниже код, я получаю следующую ошибку:

[NSUserDefaults setObject: forKey:]: попытка вставить значение, не являющееся свойством '( ... (примечание: содержит 50 строк значений) ) 'класса' __NSArrayM '.

Я храню другие NSMutableArrays в моем файле plist, используя тот же метод, но не могу найти способ сохранить запрошенные результаты базы данных.

Вы можете спросить: зачем хранить значения, просто запрашивать базу данных, когда мне снова нужны значения? Причина в том, что я извлекаю случайные строки из базы данных, и мне нужно вспомнить строки в точности так, как они были первоначально рандомизированы.

Любая помощь приветствуется, LQ

 ...
 fetchResults = [managedObjectContext executeFetchRequest:request error:&error];
 self.myDataArray = [NSMutableArray arrayWithArray:fetchResults];

 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
 [userDefaults setObject:self.myDataArray forKey:kFetchResultsArray];

1 Ответ

0 голосов
/ 04 октября 2010

Элементы в myDataArray не являются объектами списка свойств, поэтому их нельзя автоматически сериализовать в plist.

Из ссылки на класс NSUserDefaults для setObject:forKey::

Параметром значения могут быть только объекты списка свойств: NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary.Для объектов NSArray и NSDictionary их содержимое должно быть объектами списка свойств.См. «Что такое список свойств?» В Руководстве по программированию списка свойств.

Возможно, вы захотите рассмотреть механизм хранения данных, отличный от настроек пользователя по умолчанию.Из Руководство по программированию списка свойств :

Во многих приложениях требуется механизм для хранения информации, который понадобится позднее.В ситуациях, когда вам необходимо хранить небольшие объемы постоянных данных, скажем, менее нескольких сотен килобайт, списки свойств предлагают единообразные и удобные средства организации, хранения и доступа к данным.

В некоторых ситуацияхархитектура списка свойств может оказаться недостаточной.Если вам нужен способ хранения больших, сложных графиков объектов, объектов, не поддерживаемых архитектурой списка свойств, или объектов, параметры изменчивости которых необходимо сохранить, используйте архивирование.См. Руководство по программированию архивов и сериализаций для получения дополнительной информации.

...