【问题标题】:Save only part of objects in Core Data在 Core Data 中只保存部分对象
【发布时间】:2013-09-01 15:27:31
【问题描述】:

问题: 我正在实现用户在 xml 中下载大量对象的应用程序。为了减少峰值内存占用,我想将数据解析为 Core Data,然后使用批处理在表格视图中显示它们。我不希望它们被保存,因为对象每天都在变化,但我想让用户选择它最喜欢的对象,然后保存它们。收藏夹将显示在不同的表格视图中。

我正在考虑的解决方案:

  1. 创建两个 NSManagedObjectContext(一个 main 和一个 tmp)。解析对象到 tmp,如果它被标记为最喜欢的复制对象到 main 并从那里保存。
  2. 忘记内存,将数据保存在某个数组中,只保存选定的数组。
  3. 使用一个 NSManagedObjectContext 保存所有内容,并在应用程序终止之前删除未上市的收藏夹。

这里的任何提示都会很好。还有一些带有解决方案一的代码示例代码,因为我是 Core Data 的新手,我可能会遇到问题。这两天我一直在寻找合适的解决方案。

【问题讨论】:

    标签: iphone ios core-data nsmanagedobjectcontext


    【解决方案1】:

    我建议您忘记优化内存占用,除非/直到您有确凿的证据表明确实需要这样做。但当然,这取决于“xml 中的大量对象”的确切含义。

    我假设您下载数以百万计的 XML 文档并不是为了在应用程序完成后再次丢弃它们(因为这会严重浪费网络资源)。相比之下,就内存而言,具有数百甚至数千个类似 XML 的小型数据结构的数组很可能无需担心。

    话虽如此,如果您毕竟需要使用 Core Data 保存临时数据和持久数据,我会选择具有两个实体而不是两个单独上下文的单个 NSManagedObjectContext。或者您甚至可以拥有一个实体并将某些实例标记为临时数据。管理两个不同的上下文意味着额外的开销,而我并没有真正看到这种方法有什么好处。

    【讨论】:

    • 有没有办法使用实体(NSManagedObject 的子类)作为临时数据?当您下载临时数据并仅将其中一部分保存到核心数据时,通常是如何完成的?
    • 我只是将所有内容保存到数据库中,然后在不再需要时删除临时数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    相关资源
    最近更新 更多