알아 냈습니다. 소스 버전 및 대상 버전을 설정,
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil URL:storeURL options:options error:&error])
{
//other code handle error
}
이 엑스 코드와 매핑 모델을 만들기 : 영구 저장소 코디네이터를 만들 때 먼저,이 옵션을 설정합니다.
NSEntityMigrationPolicy의 하위 클래스를 만들고 이름을 MyPolicy
으로 지정하고 메서드를 덮어 씁니다.
-(BOOL)createRelationshipsForDestinationInstance:(NSManagedObject *)dInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error
이 메서드를 호출 할 때 모든 managedObjects는 대상 컨텍스트에서 작성되었지만 관계는 없습니다. 이 방법에서는 dInstance가 어떤 엔터티인지 확인하고 해당 관계를 만듭니다.
Xcode를 사용하여 매핑 모델에서 InstanceToInstance
이라는 매핑 정책을 사용하는 ENTITY MAPPINGS를 MyPolicy
으로 설정하십시오.
이 메서드는 각 인스턴스 개체에 대해 한 번 호출됩니다. 내 질문에, 나는이 작업을 수행해야합니다
-(BOOL)createRelationshipsForDestinationInstance:(NSManagedObject *)dInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error{
NSError *superError = nil;
BOOL mappingSuccess = [super createRelationshipsForDestinationInstance:dInstance entityMapping:mapping manager:manager error:&superError];
if ([dInstance.entity.name isEqualToString:@"Rule"]){
Instance *instance = (Instance*)dInstance;
NSFetchRequest *fetch = [[NSFetchRequest alloc] initWithEntityName:@"Instance"];
fetch.predicate = [NSPredicate predicateWithFormat:@"identifier == %@",instance.identifier];
NSArray *result = [manager.destinationContext executeFetchRequest:fetch];
Rule *rule = [result objectAtIndex:0];
instance.rule = rule;
}
return YES;
}
그런 다음, 규칙 및 인스턴스 사이의 관계 우주선이 경우 앱 출시를 생성됩니다.
또한 NSEntityMigrationPolicy의 하위 클래스로 생성 된 관계는 xcode의 마이그레이션 정책 편집 창에서 값 표현식을 설정하지 않아도되므로 공백으로 남겨 둡니다.
tkanzakic에 감사드립니다. 다음 번에 내 형식을 잘 수행 할 것입니다. :) – CarmeloS