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

时间:2012-02-22 21:28:29

标签: ios core-data

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

来自this answer

  

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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