核心数据:将对象从一个持久存储移动到另一个

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】:

我怎样才能告诉我的托管对象将自己复制到另一个存储中?

你不能,反正不能直接。您必须执行以下操作:

对于原始数据存储中的每个对象, 在目标存储中创建一个具有相同实体类型的新对象 将新对象的属性分配给与原始对象相同的值 创建新对象后,再执行一遍以设置任何关系。

关系需要单独完成,因为关系中的所有对象都需要存在才能创建关系。

【讨论】:

我如何告诉托管对象它是在哪个持久存储中创建和保存的? 当我完成这样的事情时,我使用了两个完全不同的核心数据堆栈——相同的模型,但不同的持久存储协调器和托管对象上下文。如果你想用一个堆栈来做,请查看NSManagedObjectContextassignObject:toPersistentStore: 方法。 非常感谢您的帮助,看来我快到了...现在我只需要找到制作深层副本的最佳方法...您建议手动进行还是有自动/动态解决方案。还没找到合适的... 如果你指的是关系,没有自动的方法。您需要在创建新对象时创建一个查找表,然后在第二遍添加关系时使用它。

以上是关于核心数据:将对象从一个持久存储移动到另一个的主要内容,如果未能解决你的问题,请参考以下文章

将数据从一个视图移动到另一个视图

将对象从一页移动到另一页?

如何将从核心数据获取的数据发送到另一个 VC?

Hibernate Session对象核心方法

将对象从一个 Core Data UITableView 移动到另一个?

如何将数据直接从一个 Google Cloud Storage 项目移动到另一个?