在 Core Data 中只保存部分对象

Posted

技术标签:

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

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

我正在考虑的解决方案:

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

有没有办法使用实体(NSManagedObject 的子类)作为临时数据?当您下载临时数据并仅将其中一部分保存到核心数据时,通常是如何完成的? 我只是将所有内容保存到数据库中,然后在不再需要时删除临时数据。

以上是关于在 Core Data 中只保存部分对象的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 对象有时不会保存到永久存储中

iPhone在Core Data中保存多个对象?

将对象数组保存到 Core Data

在 Core Data 中保存对象

即使验证失败,Core Data 也会保存对象

如何在 RestKit 中保存到 Core Data RKMappingResult 对象?