核心数据:将对象从一个持久存储移动到另一个
Posted
技术标签:
【中文标题】核心数据:将对象从一个持久存储移动到另一个【英文标题】:Core Data: move object from one persistent store to another 【发布时间】:2013-05-02 14:52:35 【问题描述】:我在我的应用程序中使用 Core Data,并且希望仅导出部分数据并将其导入其他设备。
为避免迁移问题,我想执行以下操作:
导出:
使用相同的数据库模型创建第二个 export.sqlite 文件,但为空 使用 addPersistentStoreWithType 添加该文件 将一些 ManagedObjects 复制到该 .sqlite 中 删除添加的持久存储进口: - 将 export.sqlite 文件复制到应用程序中 - 使用 addPersistentStoreWithType 添加该 .sqlite 文件 - 复制数据 - 移除添加的persistentStore
但是如何实现呢?即我如何告诉我的托管对象将自己复制到另一个存储中?
【问题讨论】:
你做到了吗?我也有类似的问题***.com/questions/33694048/…你能帮帮我吗? 【参考方案1】:我怎样才能告诉我的托管对象将自己复制到另一个存储中?
你不能,反正不能直接。您必须执行以下操作:
对于原始数据存储中的每个对象, 在目标存储中创建一个具有相同实体类型的新对象 将新对象的属性分配给与原始对象相同的值 创建新对象后,再执行一遍以设置任何关系。关系需要单独完成,因为关系中的所有对象都需要存在才能创建关系。
【讨论】:
我如何告诉托管对象它是在哪个持久存储中创建和保存的? 当我完成这样的事情时,我使用了两个完全不同的核心数据堆栈——相同的模型,但不同的持久存储协调器和托管对象上下文。如果你想用一个堆栈来做,请查看NSManagedObjectContext
的assignObject:toPersistentStore:
方法。
非常感谢您的帮助,看来我快到了...现在我只需要找到制作深层副本的最佳方法...您建议手动进行还是有自动/动态解决方案。还没找到合适的...
如果你指的是关系,没有自动的方法。您需要在创建新对象时创建一个查找表,然后在第二遍添加关系时使用它。以上是关于核心数据:将对象从一个持久存储移动到另一个的主要内容,如果未能解决你的问题,请参考以下文章