我正在编写一个使用CoreData的Cocoa应用程序。我现在有几个版本给测试人员,当他们升级到最新的beta版本时,他们希望能够保存他们的数据。我一直在使用映射模型自动地将数据库从一个版本迁移到另一个版本,没有问题。
但这一次,我不得不迁移一个数据库,在那里,曾经是可选的关系变成了非可选的关系。当CoreData迁移到这个版本时,它会崩溃,说明这种关系是必需的。这是有意义的--如果没有早期版本中的关系,它怎么可能知道在这些对象中放什么呢?
因此,我想我需要在某个地方编写一些代码,创建一个新的托管对象,如果旧数据库中的关系为0,则填充该关系。我认为这可能意味着对NSMigrationPolicy进行子类化,但我在网上找到的所有示例都显示了如何迁移属性,而不是关系。
因此,我的问题是:如何在迁移时创建一个NSManagedObject来填充从可选到非可选的关系?
发布于 2012-12-11 23:11:42
我认为最简单的方法是创建一个单独的脚本,从旧的Core数据存储区读取并写入新的数据库,根据需要动态创建任何必需的对象。
发布于 2012-01-02 14:35:12
有趣的问题。我现在还没有现成的答案,但我会从重写- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error开始。
这似乎是一个可以确定给定实例(NSManagedObject *)sInstance是否有空关系的点,如果是,则填充它。
https://stackoverflow.com/questions/6050795
复制相似问题