0

我试图设置一个 NSString 对象,如下所示:

[[NSUserDefaults standardUserDefaults] setObject:[[self formModel] attributeAsString:@"someKey"] forKey:@"someValueKey"];

它不会每次都崩溃。在某些时候它会崩溃说"Attempt to set a non-property-list object as an NSUserDefaults value"

任何人都可以帮助我正确设置此值并在需要时获取它吗?

提前致谢。

4

2 回答 2

2

如果要存储除NSDataNSStringNSNumberNSDateNSArray或以外的对象NSDictionary,则应将其归档以创建NSData.

您可以使用NSPropertyListSerialization 类的propertyList:isValidForFormat:方法来验证属性列表

于 2013-11-19T08:34:34.190 回答
2

您确定实际上返回的是 NSString(或 NSString 的子类),而不是 NSAttributedString?

你确定是那条线?尝试在'abort'上添加一个断点,然后等待它被击中。您应该能够查找堆栈并查看您在代码中触发问题的位置,然后检查您传递给 NSUserDefaults 的值。

基本上,您实际上传递有效字符串的可能性很小,您的代码中可能存在导致其他内容的错误。

(编辑以添加我在评论中的想法)

哦,另一个想法:您可以使用函数 CFPropertyListIsValid 来确定对象是否是有效的属性列表对象。这可以让您在代码中更早地捕捉到它,并查看发生了什么。

于 2013-11-19T08:10:23.307 回答