使用Core Data和XML解析将对象保存为收藏夹

时间:2010-08-12 08:34:33

标签: iphone objective-c xml core-data

我正在开发一个项目,其中app解析XML文件中的数据,将其保存到持久性存储并填充表视图。每次应用程序打开时,如果有可用的Internet连接,持久性存储将被回收,并且XML会在频繁更新时再次进行解析。如果没有可用的互联网连接,我将只加载保存在持久存储中的最新解析数据。

解析完成后,用户就可以浏览对象,并可能将其标记为收藏夹。

完成后,我希望能够在单独的标签栏中显示这些“标记为收藏”的对象,并在用户将其标记为收藏夹时保留它们。

如果来自我的持久性商店的数据没有如此频繁地回收,这可以很容易地完成,但事实并非如此,我想找到最好的方法:

  1. 创建一个额外的持久性商店;
  2. 能够将对象从一个商店复制到另一个商店
  3. 或者

    您能否建议更好的实施方法?

    非常感谢,

    罗热

3 个答案:

答案 0 :(得分:1)

您可以将它们标记为收藏夹,然后不要在模型中删除或更新它们。没有必要将对象复制到任何地方,只需要这么简单。

在名为“favorite”的实体中放置一个布尔标志,然后如果该标志设置为YES,则不要在下次XML刷新时更新该实体,也不要删除它。

答案 1 :(得分:1)

对于任何对这个问题的解决方案感兴趣的人来说,事实证明Marcus的建议比我最初的预期更容易实现。

使这项工作的基本逻辑流程是:

  1. 从网络服务下载XML Feed

  2. 从持久性商店

  3. 执行标记为收藏的对象的获取请求
  4. 实现逻辑以比较正在解析的新对象和保存为收藏夹的对象的唯一ID。

  5. 如果找到匹配项,请删除现有/已保存的对象,继续解析新对象并将其标记为收藏夹(仅当您的对象可能具有其他/更新数据时才需要这样做忽略被解析的对象并保持原始对象以节省额外的处理时间。

  6. 使用NSFetchedResultsController管理为您更新视图。我个人对我的收藏夹有一个单独的视图,并使用谓词只显示标记为收藏的对象。

  7. 干杯, ROG

答案 2 :(得分:0)

我不知道你的问题是否仍然是最新的,但我倾向于使用额外的标志为你的更新列表,如马库斯已经解释过。所以你只需要比较标志,这是通过高性能比较两个单独的列表来完成的。特别是如果你保留每一个数据两次,你就会遇到内存问题。