Одна вещь, которую вы можете сделать, - это создать собственный класс политики миграции, в котором есть функция, отображающая ваш атрибут из исходного значения в новое значение.Например, у меня был случай, когда мне нужно было сопоставить сущность MyItems, которая имела прямое отношение к набору сущностей значений, называемых «Предметы», чтобы вместо этого сохранить itemID, чтобы я мог разделить модель по нескольким хранилищам.
Старая модель выглядела так: ![old model](https://i.stack.imgur.com/mrSIM.png)
Новая модель выглядела так: ![new model](https://i.stack.imgur.com/GLPtf.png)
Для этого я написал класс отображения с функцией itemIDForItemName, и это былоопределяется следующим образом:
@interface Migration_Policy_v1tov2 : NSEntityMigrationPolicy {
NSMutableDictionary *namesToIDs;
}
- (NSNumber *) itemIDForItemName:(NSString *)name;
@end
# import "Migration_Policy_v1tov2.h"
@implementation Migration_Policy_v1tov2
- (BOOL)beginEntityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error {
namesToIDs = [NSMutableDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:1],@"Apples",
[NSNumber numberWithInt:2],@"Bananas",
[NSNumber numberWithInt:3],@"Peaches",
[NSNumber numberWithInt:4],@"Pears",
[NSNumber numberWithInt:5],@"Beef",
[NSNumber numberWithInt:6],@"Chicken",
[NSNumber numberWithInt:7],@"Fish",
[NSNumber numberWithInt:8],@"Asparagus",
[NSNumber numberWithInt:9],@"Potato",
[NSNumber numberWithInt:10],@"Carrot",nil];
return YES;
}
- (NSNumber *) itemIDForItemName:(NSString *)name {
NSNumber *iD = [namesToIDs objectForKey:name];
NSAssert(iD != nil,@"Error finding ID for item name:%@",name);
return iD;
}
@end
Затем для связанного имени сопоставления для атрибута в модели сопоставления вы задаете выражение значенияв результате вызова вашей функции как таковой: FUNCTION ($ entityPolicy, "itemIDForItemName", $ source.name).Вам также необходимо установить в поле «Пользовательская политика» вашего имени сопоставления для этого атрибута имя класса сопоставления (в данном случае Migration_Policy_v1toV2).
![Mapping Model](https://i.stack.imgur.com/VnBs2.png)