如果您的模型更改至少有一个源和目标实体级别映射(例如,您的旧模型中有一个Vehicle
实体,现在您想将该数据迁移到Car
),那么您可以使用自定义映射模型与迁移策略。
该过程相当简单,在Xcode中,尝试添加一个新的映射模型文件到您的项目中,选择源模型版本和目标模型版本。 Xcode试图找出源和目标实体的属性之间的映射关系。如果无法执行,则只需将映射留空即可,您可以设置自己的映射。
如果您想在映射过程中执行除简单赋值,消隐或设置属性的默认值之外的其他操作,请使用名为NSEntityMigrationPolicy
的东西。创建自己的子类,并实现这个方法做你的自定义映射:
- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)instance
entityMapping:(NSEntityMapping *)mapping
manager:(NSMigrationManager *)manager
error:(NSError **)error {
NSArray *_properties = [mapping attributeMappings];
for (NSPropertyMapping *_property in _properties) {
if ([[_property name] isEqualToString:@"companyName"]) {
NSExpression *_expression = [NSExpression expressionForConstantValue:@"10to1"];
[_property setValueExpression:_expression];
}
}
return [super createDestinationInstancesForSourceInstance:instance
entityMapping:mapping
manager:manager
error:error];
}
您可以阅读更多关于如何做一个自定义迁移here。