CoreData将可选关系迁移到非可选关系

时间:2011-05-18 20:46:22

标签: objective-c cocoa core-data migration

我正在编写一个使用CoreData的Cocoa应用程序。我现在有几个版本给测试人员,他们希望能够在升级到最新测试版时保留他们的数据。我一直在使用映射模型自动将数据库从一个版本迁移到另一个版本,没问题。

但是这一次,我必须迁移一个曾经是可选关系的数据库成为非可选关系。当CoreData迁移到此版本时,它会崩溃,并说该关系是必需的。这是有道理的 - 如果在早期版本中没有关系的那些对象,它怎么可能知道放在哪里?

所以我想我需要编写一些代码来创建一个新的托管对象来填充关系,如果它在旧数据库中为零。我认为这可能意味着继承NSMigrationPolicy,但我在网上找到的所有示例都显示了如何迁移属性,而不是关系

所以我的问题是:如何在迁移时创建NSManagedObject来填充从可选到非可选的关系?

2 个答案:

答案 0 :(得分:2)

我认为最简单的方法是创建一个单独的脚本,从旧的Core Data存储中读取并写入新的,然后根据需要动态创建任何所需的对象。

答案 1 :(得分:1)

有趣的问题。我现在没有现成的答案,但我首先要重写 - (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error

看起来这可能是您可以确定给定实例(NSManagedObject *)sInstance是否具有空关系的点,如果是,请填写它。