如果您的模型更改至少有一個源和目標實體級別映射(例如,您的舊模型中有一個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。