我有一个使用核心数据的iPhone应用程序。
我做了一次更新,并使用轻量级迁移从我的MOM(托管对象模型)的V1到V2。这非常有效。
当我想要去我妈妈的V3(及以上)时会发生什么?
另一个问题是确定当前MOM版本的最佳方法是什么?我应该使用isConfiguration:compatibleWithStoreMetadata:
感谢您的帮助。我很喜欢核心数据。但它有时让我头晕目眩,我感到困惑,这就是我寻求一些圣人智慧的原因。
答案 0 :(得分:7)
最初的帖子现在已经发布了很多个月,但我认为最好的答案可以在Marcus Zarra的核心数据手册中找到(或者在代码示例中在线)。谷歌的“渐进式云计算”,人们将找到逐步迭代模型的代码 - 这将允许人们创建从模型n到模型n + 1的映射,同时不用担心在所有模型配对之间创建映射的组合爆炸。
这可能会导致运行时迁移速度变慢。我没有调查过这个。
答案 1 :(得分:2)
我使用createDestinationInstancesForSourceInstance进行普通迁移 该代码段显示了如何覆盖该方法以及如何获取要迁移的模型的sourceVersion。 实际迁移发生在辅助类TZMigrationHelper中。
- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error
{
float sourceVersion = [[[mapping userInfo] valueForKey:@"sourceVersion"] floatValue];
if(sourceVersion <= 0.9)
{
mapping = [TZMigrationHelper addAttributeMappingForDerivedRTFProperties:sInstance mapping:mapping propertyName:@"someProperty"];
mapping = [TZMigrationHelper addAttributeMappingForDerivedRTFProperties:sInstance mapping:mapping propertyName:@"anotherProperty"];
mapping = [TZMigrationHelper addAttributeMappingForDerivedRTFProperties:sInstance mapping:mapping propertyName:@"oneMoreProperty"];
}
return [super createDestinationInstancesForSourceInstance:sInstance entityMapping:mapping manager:manager error:error];
}