2013-05-02 41 views
2

我在我的应用程序中使用核心数据,并且只想导出一些数据并将其导入其他设备。核心数据:将对象从一个持久性存储移动到另一个

为了避免迁移问题,我想做到以下几点:

出口:

  • 创建第二个export.sqlite文件具有相同的数据库模型,但空
  • 加该文件与addPersistentStoreWithType
  • 将一些ManagedObjects复制到该.sqlite
  • 删除添加的持久性存储

进口: - 复制export.sqlite文件到应用程序 - 添加.sqlite文件与addPersistentStoreWithType - 拷贝过来 数据 - 删除添加persistentStore

但如何实现这一目标?即如何告诉我的托管对象如何将自己复制到其他商店?

+0

你有没有做到这一点?我也有类似的问题http://stackoverflow.com/questions/33694048/coredatamigrate-data-from-bundled-db你能帮我吗? – anoop4real 2016-01-22 09:52:52

回答

2

如何告诉我的管理对象如何将自己复制到其他商店?

你不能,不能直接反正。你必须做一些事情,如:

  • 对于源数据存储中每个对象,
    • 用相同的实体类型
    • 分配新对象的属性创建目标存储中的新对象与原始对象相同的值
  • 一旦完成创建新对象,请执行第二遍设置任何关系。

这些关系需要分开进行,因为关系中的所有对象都需要存在才能创建关系。

+0

以及如何告知托管对象在哪个持久性存储中创建并保存? – swalkner 2013-05-02 16:14:52

+1

当我做了这样的事情时,我使用了两个完全不同的核心数据堆栈 - 相同的模型,但是不同的持久性存储协调器和受管理的对象上下文。如果你想用一个堆栈来实现,可以看看NSManagedObjectContext的'assignObject:toPersistentStore:'方法。 – 2013-05-02 16:16:41

+0

非常感谢您的帮助,似乎我到了那里......现在我只需要获得制作深层副本的最佳方法......您是否建议手动执行此操作,或者是否存在自动/动态解决方案。没有找到工作的一个呢...... – swalkner 2013-05-03 07:24:26

相关问题