如何在应用程序的plist文件中存储Fetch结果?

时间:2010-10-04 17:14:27

标签: iphone xcode nsmutablearray nsuserdefaults fetch

我使用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];

1 个答案:

答案 0 :(得分:0)

myDataArray中的项目不是属性列表对象,因此它们无法自动序列化为plist。

来自NSUserDefaults class referencesetObject:forKey:

  

值参数只能是   属性列表对象:NSData,   NSString,NSNumber,NSDate,NSArray,   或NSDictionary。对于NSArray和   NSDictionary对象,它们的内容   必须是属性列表对象。看到   财产中的“什么是财产清单?”   列表编程指南。

您可能需要考虑用户默认值以外的机制来存储此数据。来自Property List Programming Guide

  

许多应用程序需要一种机制   用于存储将要的信息   需要在以后的时间。对于情况   你需要储存少量的地方   持久性数据 - 比如少数   百千字节 - 财产清单提供   一种统一而方便的手段   组织,存储和访问   数据

     

在某些情况下,属性列表   架构可能证明不足。   如果你需要一种存储方式,   对象的复杂图形,对象不是   由属性列表支持   体系结构或其对象   必须保留可变性设置,   使用存档。请参阅Archives and Serializations Programming Guide   更多信息。