Сбой при попытке установить объекты не из списка свойств в 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, чтобы определить, является ли объект допустимым объектом списка свойств. Это может позволить вам поймать это раньше, в своем коде, и посмотреть, что происходит.

Другие вопросы по тегам