Как сохранить / получить NSDictionary в NSUserDefaults? - PullRequest
1 голос
/ 28 февраля 2012

в моем приложении у меня нет проблем с сохранением / извлечением строковых значений (например, myTextField.text) в NSUserDefaults, но что бы я ни делал для хранения NSDictionary, у меня ничего не получится. И я попробовал много ответов с этого сайта + Google. Может кто-нибудь, пожалуйста, помогите? Вот мой код тоже:

id result=[NSJSONSerialization JSONObjectWithData:data options:
               NSJSONReadingMutableContainers error:&error];
    NSLog(@"Result: %@", result);


      NSDictionary *dict= [result objectForKey:@"message"];
    //i want to store dict sub dictionary 

* РЕДАКТИРОВАТЬ * Примечание. Словарь содержит своего рода массив объектов, и все объекты являются членами списка свойств (NSString, NSDate, ...)

Ответы [ 3 ]

3 голосов
/ 28 февраля 2012

Что другие ответы пытаются вам сказать, вы должны избавиться от своего (id). NSUserDefaults и компилятор будут жаловаться и выдавать предупреждения, если вы попытаетесь ввести идентификатор в пользовательские значения по умолчанию. Попробуйте это так.

NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];

if (result) {
   [[NSUserDefaults standardUserDefaults] setObject:result forKey:@"yourUniqueKey"];
}
2 голосов
/ 28 февраля 2012

Это связано с тем, что некоторые объекты в вашем NSDictionary не являются примитивными объектами Objective C, или, проще говоря, iOS не знает, как преобразовать пользовательские данные в NSDictionary в форму, котораяможет быть сохранен и загружен снова.

Так что вам нужно узнать, как заставить эти пользовательские объекты соответствовать NSCoding.

Вот связанный вопрос, который должен иметь некоторые полезныеинформация для вас.

1 голос
/ 28 февраля 2012

Это зависит от того, что вы храните. документация Apple говорит

Класс NSUserDefaults предоставляет удобные методы для доступа к распространенным типам, таким как числа с плавающей запятой, двойные числа, целые числа, логические значения и URL-адреса. Объектом по умолчанию должен быть список свойств, то есть экземпляр (или для коллекций комбинация экземпляров): NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary , Если вы хотите сохранить какой-либо другой тип объекта, вы обычно должны заархивировать его, чтобы создать экземпляр NSData. Подробнее см. Руководство по программированию предпочтений и настроек .

Полагаю, вы пытаетесь сохранить тип, отличный от перечисленных.

...