【问题标题】:NSUserDefaultsProblemNSUserDefaults 问题
【发布时间】:2011-03-21 21:25:30
【问题描述】:
我有一个简单的问题:
我向 NSArray 添加了一个对象,然后向其中添加了一个对象,然后我使用 NSUserDefaults 方式保存数组,但它不起作用,我的意思是数组没有保存,控制台向我发送了这个消息:
2011-03-21 23:09:53.994 Project[10490:207] * -[NSUserDefaults setObject:forKey:]: 尝试插入非属性值 '(
“”
)' 的类 '__NSArrayM'。
有谁知道我该如何解决这个问题。
【问题讨论】:
标签:
cocoa-touch
ios
nsuserdefaults
【解决方案1】:
NSUserDefaults 只允许你保存基本的轻量级对象;例如 NSString、NSNumber 和 NSData。如果要添加另一个类,则必须事先将其硬塞到 NSData 对象中。这很简单,通常只需调用[NSKeyedArchiver archivedDataWithRootObject:array];。请注意,数组中的对象必须实现 NSCoding 协议,如果您想保存,则必须将其添加到您自己的任何自定义类中。
还请记住,NSUserDefaults 用于轻量级首选项,而不是应用程序数据。如果您有大量对象,最好将其归档到自己的文件中或使用 Core Data(如果您愿意使用更高级的东西)。
【解决方案2】:
您可以保存在 NSUserDefaults 中的唯一类型是属性列表类型:NSString、NSDate、NSArray、NSDictionary、NSNumber、NSData。您可能正在尝试保存不是这些类型之一的对象数组。