2012-02-22 69 views
2

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

this answer

如果您还需要有对象之间的关系在这两个商店,或者你真的只是想有一个单店,最好的办法是创建第二NSPersistentStoreCoordinator和第三,不同的持久性存储来容纳合并的对象图。您将需要编写代码来创建连接到第二个NSPersistentStoreCoordinator的托管对象上下文中对象的副本。您需要在原始对象所拥有的副本之间建立相同的关系,但是您如何去做这取决于您的数据模型。

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

回答

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

对于我的特定数据需求,我然后提取所有记录,剔除重复项,并保存上下文。

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

相关问题