2010-10-04 32 views
0

我使用Fetch查询sqlite数据库中的行,并将结果加载到NSMutableArray myDataArray中。我想要做的是将myDataArray中的值存储到我的应用程序的首选项plist文件中。但是,当我运行下面的代码,我得到以下错误:如何在应用程序的plist文件中存储提取结果?

[NSUserDefaults的方法setObject:forKey:]:尝试插入非财产价值“( ...(注:包含50个行值) )”类'__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

在myDataArray的项目是不是属性列表对象,所以它们不能被自动序列化到一个plist中。

NSUserDefaults class referencesetObject:forKey:

The value parameter can be only property list objects: NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary. For NSArray and NSDictionary objects, their contents must be property list objects. See “What is a Property List?” in Property List Programming Guide.

你可能要考虑比用户默认存储该数据的其它机制。来自Property List Programming Guide

Many applications require a mechanism for storing information that will be needed at a later time. For situations where you need to store small amounts of persistent data—say less than a few hundred kilobytes—property lists offer a uniform and convenient means of organizing, storing, and accessing the data.

In some situations, the property-list architecture may prove insufficient. If you need a way to store large, complex graphs of objects, objects not supported by the property-list architecture, or objects whose mutability settings must be retained, use archiving. See Archives and Serializations Programming Guide for more information.

+0

感谢您的快速响应。使用存档对我来说似乎不是一个好的解决方案,所以我正在考虑的是重新设计应用程序,以便将所有50行数据拖入myDataArray,而不是将PK_ID拉入数组,将它们存储在plist中,然后使用Predicate每次取一行来调用每个PK_ID。 – 2010-10-04 21:06:07

相关问题