您可以做的一件事是创建一个自定义迁移策略类,该类具有将您的属性从原始值映射到新值的函数。例如,我需要映射一个名为 MyItems 的实体,该实体与一组名为“Items”的值实体有直接关系,以存储一个 itemID,以便我可以将模型拆分到多个商店。
旧模型如下所示:

新模型如下所示:

为此,我编写了一个映射类,其中包含一个名为 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)。
**注意这应该匹配方法的选择器签名
