新しいモデル バージョンを作成してから、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;
}
基本的に行うことは、例では「Foo」と呼ばれるの属性 ( keys
) を調べることです。sourceInstance
はsourceInstance
、色相、彩度、明るさを持つ現在のエンティティです。各属性に対して魔法を実行して、「単一の 16 進コード文字列」を作成します。この文字列は の の値になりkey
ますnewObject
。
この投稿migrateIfNeeded
の最後に、変換が必要かどうかを確認する方法があります。(それが必要かどうか、または isNeeded ロジックが既に配置されているかどうかはわかりません)