【问题标题】:How to store Fetch results in Application's plist file?如何将 Fetch 结果存储在应用程序的 plist 文件中?
【发布时间】:2010-10-04 17:14:27
【问题描述】:

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

[NSUserDefaults setObject:forKey:]: 尝试插入非属性值'( ...(注意:包含 50 行值) )' 的类 '__NSArrayM'。

我正在使用相同的方法将其他 NSMutableArrays 存储在我的 plist 文件中,但无法找到存储查询数据库结果的方法。

您可能会问:为什么要存储这些值,只是在我再次需要这些值时重新查询数据库?原因是我从数据库中提取随机行,我需要完全按照最初随机的方式调用这些行。

任何帮助表示赞赏, lq

 ...
 fetchResults = [managedObjectContext executeFetchRequest:request error:&error];
 self.myDataArray = [NSMutableArray arrayWithArray:fetchResults];

 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
 [userDefaults setObject:self.myDataArray forKey:kFetchResultsArray];

【问题讨论】:

    标签: iphone xcode nsmutablearray nsuserdefaults fetch


    【解决方案1】:

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

    NSUserDefaults class referencesetObject:forKey:

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

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

    许多应用程序需要一种机制 用于存储信息 以后需要。对于情况 您需要存放少量物品的地方 持久数据——比如说少于几个 百千字节——属性列表提供 统一且方便的方法 组织、存储和访问 数据。

    在某些情况下,属性列表 架构可能被证明是不够的。 如果您需要一种存储大容量的方法, 对象的复杂图,对象不是 由属性列表支持 建筑,或对象 必须保留可变性设置, 使用归档。见Archives and Serializations Programming Guide 更多信息。

    【讨论】:

    • 感谢您的快速回复。使用存档对我来说似乎不是一个好的解决方案,所以我正在考虑重新设计应用程序,以便将所有 50 行数据都拉到 myDataArray 中,而不是将 PK_ID 拉到一个数组中,存储它们在 plist 中,然后使用 Predicate 一次获取每一行来调用每个 PK_ID。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多