【问题标题】:Saving objects as favourites using Core Data and XML parsing使用 Core Data 和 XML 解析将对象保存为收藏夹
【发布时间】:2010-08-12 08:34:33
【问题描述】:

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

解析完成后,用户将能够浏览对象并可能将它们标记为收藏夹。

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

如果我的持久存储中的数据没有被如此频繁地回收,这可以很容易地完成,但由于情况并非如此,我想找到最好的方法:

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

或者

您能提出更好的实现方法吗?

非常感谢,

罗杰里奥

【问题讨论】:

    标签: iphone objective-c xml core-data


    【解决方案1】:

    您可以将它们标记为收藏,然后不要在模型中删除或更新它们。像这样简单的事情不需要在任何地方复制对象。

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

    【讨论】:

    • 嗨,马库斯,感谢您的回复。这一切都是有道理的,但是我将如何处理不再属于 XML 解析但仍被用户标记为最喜欢的对象。这是一个示例: - 已解析提要并将对象 ABC 保存到持久存储,添加到“最新更新”视图 - 对象 ABC 被用户标记为最喜欢,因此它也被添加到“最喜欢”视图中 - XML 文件已更新,对象 ABC不再是它的一部分。下次解析文件时,它应该从“最新更新”视图中消失,但仍可在“收藏夹”视图下使用。再次感谢!
    【解决方案2】:

    对于任何对此问题的解决方案感兴趣的人,事实证明 Marcus 的建议是正确的,并且比我最初预期的更容易实施。

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

    1. 从 Web 服务下载 XML 提要

    2. 对永久存储中标记为收藏的对象执行 Fetch 请求

    3. 实现逻辑以比较正在解析的新对象的 uniqueID 和保存为收藏的对象。

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

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

    干杯, 罗格

    【讨论】:

      【解决方案3】:

      我不知道你的问题是否仍然是最新的,但我倾向于为你的更新列表使用一个额外的标志,就像 marcus 已经解释的那样。所以你只需要比较标志,这是通过比较两个单独的列表的高性能来完成的。特别是如果您将每个数据保留两次,您的记忆就会出现问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-24
        • 1970-01-01
        • 2012-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多