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

Nat*_*orn 10 migration cocoa core-data objective-c

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

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

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

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

Eli*_*oij 1

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

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