您可以创建一个新的模型版本,然后使用 NSEntityMigrationPolicy 将实体从一个模型版本转换为另一个模型版本。
定义新的数据模型版本,填写映射模型并在Custom Policy
NSEntityMigrationPolicy 文件下设置。
这里有一篇文章可以让您开始了解实体迁移政策。他们的例子是:
- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)inSourceInstance
entityMapping:(NSEntityMapping *)inMapping
manager:(NSMigrationManager *)inManager
error:(NSError **)outError
{
NSManagedObject *newObject;
NSEntityDescription *sourceInstanceEntity = [inSourceInstance entity];
if ( [[sourceInstanceEntity name] isEqualToString:@"Foo"] )
{
newObject = [NSEntityDescription insertNewObjectForEntityForName:@"Foo"
inManagedObjectContext:[inManager destinationContext]];
NSDictionary *keyValDict = [inSourceInstance committedValuesForKeys:nil];
NSArray *allKeys = [[[inSourceInstance entity] attributesByName] allKeys];
NSInteger i, max;
max = [allKeys count];
for (i=0 ; i< max ; i++)
{
// Get key and value
NSString *key = [allKeys objectAtIndex:i];
id value = [keyValDict objectForKey:key];
if ( [key isEqualToString:@"Bar"] )
{
[newObject setValue:[NSNumber numberWithBool:[value boolValue]] forKey:key];
}
else
[newObject setValue:value forKey:key];
}
}
[inManager associateSourceInstance:inSourceInstance
withDestinationInstance:newObject
forEntityMapping:inMapping];
return YES;
}
基本上,您所做的是检查 中的属性 ( keys
),sourceInstance
在示例中称为“Foo”。是您当前的sourceInstance
实体,具有色相、饱和度和亮度。为每个属性执行你的魔法来创建“单个十六进制代码字符串”。该字符串将成为 中的key
值newObject
。
在这篇文章的最后,有一种migrateIfNeeded
方法可以检查是否需要转换。(不确定您是否需要它,或者您是否已经有 isNeeded 逻辑)