核心数据:制作数据库的逐个对象副本
Posted
技术标签:
【中文标题】核心数据:制作数据库的逐个对象副本【英文标题】:Core Data: make object-by-object copy of database 【发布时间】:2012-12-05 19:18:38 【问题描述】:我想制作我的 Core Data 数据库的备份副本,而不使用文件管理器来制作 sqlite 文件的副本,或者使用 Persistent Store Coordinator 的 migratePersistentStore 方法(原因太长,无法在此处解释)。我想要做的是用与原始文件相同的 MOMD 打开一个新的持久存储,创建一个新的托管对象上下文,然后遍历我的数据库中的所有对象并将它们插入到新的上下文中。
这适用于简单实体,但问题是我的模型有大约 20 个实体,其中许多实体具有一对多和多对多关系。稍微复杂一点的解决方案是将每个对象插入到新的 MOC 中,然后将所有新的托管对象保存在内存中,并使用它们在后续传递中绑定对象之间的所有关系。但这似乎是一个非常混乱的解决方案。
是否有一种简洁、优雅的方式来实现这一点,它可能适用于任何类型的数据模型,而不仅仅是为我自己的模型定制的解决方案,而且不必同时将每个对象都保存在内存中?
谢谢。
【问题讨论】:
【参考方案1】:复制持久性存储远远超过最简单的方法——我建议重新审视你反对它的理由或解释它们是什么。
将对象从一个上下文复制到另一个上下文——从一个磁盘上的持久存储到另一个——并不一定同时将它们全部保存在内存中。 Core Data 可以把它们变成故障。
【讨论】:
谢谢。我不能这样做的原因是 iCloud 的一些限制,您不能只迁移或复制文件并将其与其他 iCloud 帐户(甚至没有 iCloud 帐户)一起使用。 如何从 iCloud 获取数据? 这是通过使用 migratePSC API 实现的,但事实证明它会占用大量内存。这就是为什么我想使用逐个对象的复制来做到这一点,这样我可以更好地控制内存压力。以上是关于核心数据:制作数据库的逐个对象副本的主要内容,如果未能解决你的问题,请参考以下文章
CoreData+RESTKit:来自 NSFetchedResultsController 的同一对象的多个副本