Сбой при попытке установить объекты не из списка свойств в NSUserDefault
Я попытался установить объект NSString, как показано ниже:
[[NSUserDefaults standardUserDefaults] setObject:[[self formModel] attributeAsString:@"someKey"] forKey:@"someValueKey"];
Это не терпит крах каждый раз. В какой-то момент он падает, говоря "Attempt to set a non-property-list object as an NSUserDefaults value"
Кто-нибудь может мне помочь установить это значение правильно и получить его всякий раз, когда требуется?
Заранее спасибо.
2 ответа
Если вы хотите сохранить объект, то NSData
, NSString
, NSNumber
, NSDate
, NSArray
, или же NSDictionary
, вы должны заархивировать его, чтобы создать экземпляр NSData
,
Вы можете использовать propertyList: isValidForFormat: метод класса NSPropertyListSerialization для проверки списка свойств
Вы уверены, что на самом деле возвращает NSString (или подкласс NSString), а не, скажем, NSAttributedString?
Вы уверены, что это та линия? Попробуйте добавить точку останова на "abort", а затем подождите, пока она не будет нажата. Вы должны быть в состоянии найти стек и увидеть, где в вашем коде вы вызываете проблему, а затем проверить значение, которое вы передаете в NSUserDefaults.
По сути, очень маловероятно, что вы действительно передаете действительную строку, скорее всего, в вашем коде есть ошибка, которая вызывает что-то еще.
(Изменить, чтобы добавить идею, которую я имел в комментарии)
О, еще одна идея: вы можете использовать функцию CFPropertyListIsValid, чтобы определить, является ли объект допустимым объектом списка свойств. Это может позволить вам поймать это раньше, в своем коде, и посмотреть, что происходит.