我使用Fetch从我的sqlite数据库查询行并将结果加载到NSMutableArray myDataArray中。我想要做的是将myDataArray中的值存储到我的应用程序的首选项plist文件中。但是当我运行下面的代码时,我收到以下错误:
[NSUserDefaults setObject:forKey:]:尝试插入非属性值'( ...(注意:包含50行值) )''class'_NSArrayM'。
我使用相同的方法在plist文件中存储其他NSMutableArrays,但无法找到存储查询数据库结果的方法。
您可能会问:为什么要存储值,只需在我再次需要值时重新查询数据库?原因是我从数据库中提取随机行,我需要完全按原来随机调用行。
感谢任何帮助, LQ
...
fetchResults = [managedObjectContext executeFetchRequest:request error:&error];
self.myDataArray = [NSMutableArray arrayWithArray:fetchResults];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:self.myDataArray forKey:kFetchResultsArray];
答案 0 :(得分:0)
myDataArray中的项目不是属性列表对象,因此它们无法自动序列化为plist。
来自NSUserDefaults class reference的setObject:forKey:
:
值参数只能是 属性列表对象:NSData, NSString,NSNumber,NSDate,NSArray, 或NSDictionary。对于NSArray和 NSDictionary对象,它们的内容 必须是属性列表对象。看到 财产中的“什么是财产清单?” 列表编程指南。
您可能需要考虑用户默认值以外的机制来存储此数据。来自Property List Programming Guide:
许多应用程序需要一种机制 用于存储将要的信息 需要在以后的时间。对于情况 你需要储存少量的地方 持久性数据 - 比如少数 百千字节 - 财产清单提供 一种统一而方便的手段 组织,存储和访问 数据
在某些情况下,属性列表 架构可能证明不足。 如果你需要一种存储方式, 对象的复杂图形,对象不是 由属性列表支持 体系结构或其对象 必须保留可变性设置, 使用存档。请参阅Archives and Serializations Programming Guide 更多信息。