将多个商店中的对象保存到单个持久性商店

我有两个持久存储,其对象使用相同的模型。 我想在一个上下文中打开两个商店,但是只将上下文保存到一个商店,然后安全地删除其中一个商店。 我本质上是试图将两个持久存储的内容合并到一个持久存储中。 因为实体有关系,我发现这很困难。

从这个答案 :

如果你确实需要在两个商店中的对象之间建立关系,或者你真的只想拥有一个商店,那么最好的办法是创建第二个NSPersistentStoreCoordinator和第三个不同的持久存储来保存合并的对象图。 您需要编写代码以在附加到第二个NSPersistentStoreCoordinator的托管对象上下文中创建对象的副本。 您还需要在原始对象的副本之间设置相同的关系,但是如何执行此操作取决于您的数据模型。

这使得它看起来很清楚,除了详细说明如何为新商店制作对象的副本。 这是迁移问题吗?

最终,我使用了以下方法:

[migrator migrateStoreFromURL:[NSURL fileURLWithPath:incomingPath] type:nil options:nil withMappingModel:managedObjectModel toDestinationURL:[NSURL fileURLWithPath:finalPath] destinationType:nil destinationOptions:nil error:&err]; [persistentStoreCoordinator removePersistentStore:[[persistentStoreCoordinator persistentStores]lastObject] error:&err]; 

“incomingPath”中的文件是我导入的商店,“finalPath”中的文件是我想要合并到的已存在的商店。 两个商店都在同一个持久协调器中打开,并且都使用相同的对象模型。 然后我删除了传入的商店,再也没有看过它; 我想我可以在文件系统级别删除它。

为了满足我的特定数据需求,我随后获取了所有记录,剔除了重复项,并保存了上下文。

我发布这个答案是因为作为核心数据的新手,这个简单的迁移解决了“无法在不同商店中保存对象关系”的问题,这是非直观的。