将对象从多个存储保存到单个持久存储
Posted
技术标签:
【中文标题】将对象从多个存储保存到单个持久存储【英文标题】:Save objects from multiple stores to single persistent store 【发布时间】:2012-02-22 21:28:29 【问题描述】:我有两个持久存储,其中包含使用相同模型的对象。我想在一个上下文中打开两个商店,但只将上下文保存到一个商店,然后安全地删除其中一个商店。我本质上是在尝试将两个持久存储的内容合并到一个持久存储中。因为实体之间存在关系,所以我觉得这很困难。
来自this answer:
如果您确实需要在两个存储中的对象之间建立关系,或者您真的只想拥有一个存储,那么最好的办法是创建第二个 NSPersistentStoreCoordinator 和第三个不同的持久存储来保存合并的对象图形。您将需要编写代码以在附加到第二个 NSPersistentStoreCoordinator 的托管对象上下文中创建对象的副本。您还需要在原始对象所具有的副本之间设置相同的关系,但是如何执行此操作取决于您的数据模型。
这看起来很清楚,除了如何从字面上复制新商店的对象的细节。这是迁移问题吗?
【问题讨论】:
【参考方案1】:最终,我使用了以下方法:
[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”中的文件是我想要合并到的已经存在的商店。两个存储都在同一个持久协调器中打开,并且都使用相同的对象模型。然后我删除了传入的商店,再也没有看过它;我想我可以在文件系统级别删除它。
针对我的特定数据需求,然后我获取了所有记录,剔除重复项,并保存了上下文。
我发布这个答案是因为作为核心数据新手,这个简单的迁移以非直观的方式解决了“无法将关系保存到不同商店中的对象”的问题。
【讨论】:
以上是关于将对象从多个存储保存到单个持久存储的主要内容,如果未能解决你的问题,请参考以下文章