我正在编写一个使用CoreData的Cocoa应用程序。我现在有几个版本给测试人员,他们希望能够在升级到最新测试版时保留他们的数据。我一直在使用映射模型自动将数据库从一个版本迁移到另一个版本,没问题。
但是这一次,我必须迁移一个曾经是可选关系的数据库成为非可选关系。当CoreData迁移到此版本时,它会崩溃,并说该关系是必需的。这是有道理的 - 如果在早期版本中没有关系的那些对象,它怎么可能知道放在哪里?
所以我想我需要编写一些代码来创建一个新的托管对象来填充关系,如果它在旧数据库中为零。我认为这可能意味着继承NSMigrationPolicy
,但我在网上找到的所有示例都显示了如何迁移属性,而不是关系。
所以我的问题是:如何在迁移时创建NSManagedObject来填充从可选到非可选的关系?
答案 0 :(得分:2)
我认为最简单的方法是创建一个单独的脚本,从旧的Core Data存储中读取并写入新的,然后根据需要动态创建任何所需的对象。
答案 1 :(得分:1)
有趣的问题。我现在没有现成的答案,但我首先要重写
- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error
看起来这可能是您可以确定给定实例(NSManagedObject *)sInstance是否具有空关系的点,如果是,请填写它。