2010-11-29 5 views
5

코어 데이터 애플리케이션이 있고 핵심 데이터 모델을 마이그레이션 (업그레이드)했습니다. 새 버전을 만들 때마다 각 버전에 대한 매핑 모델을 만듭니다. 지금은 16 가지 버전이 있으며 다음과 같이 매핑 모델을 가지고 있습니다. 1to2.xcmappingmodel 2to3.xcmappingmodel 3to4.xcmappingmodel ... 등. 최대 16코어 데이터의 여러 버전으로 마이그레이션

이 작업은 정상적으로 작동하지만 한 사용자가 버전 10의 데이터 파일을 가지고 있고 버전 16의 응용 프로그램을 업데이트 할 때 문제가 발생합니다. 코어 데이터가 자동으로 10에서 16으로 업그레이드되지만, "Missing Mapping Model"오류가 나타납니다. 매핑 모델이 올바른지 확인하기 위해 각 버전을 하나씩 (10-11, 11-12 등) 업그레이드하고 작동합니다 ... 여기 내 코드가 있습니다.

이 코드와 모델 버전을 지정합니다

NSBundle *modelWrapper = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"TaskApp_DataModel" ofType:@"momd"]]; 
NSString *modelPath = [modelWrapper pathForResource:@"TaskApp_DataModel 16" ofType:@"mom"]; 
NSLog(@"%@",modelPath); 
managedObjectModel = [[NSManagedObjectModel alloc]initWithContentsOfURL:[NSURL fileURLWithPath:modelPath]]; 

그리고 여기 마이그레이션 자동 옵션을 정의

NSURL *url = [NSURL fileURLWithPath: [applicationSupportDirectory stringByAppendingPathComponent: @"storedata-sql"]]; 


NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
[dict setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption]; 



if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
              configuration:nil 
              URL:url 
              options:dict 
              error:&error]){ 

사람이를 업그레이드하는 방법을 알고 있나요? 감사합니다.

답변

1

사용자가 기존 버전 (가능하면 v1)에서 현재 버전으로 이동하려고 시도합니다. 3 가지 버전이 있다면 v1-v2, v2-v3, v1-v3 용 맵이 필요합니다. 16 가지 버전 모두를 출하하셨습니까? 새 마이그레이션 맵을 만들어야 할 수도있는 경우 이전에 시도한 적이없는 경우 자동 마이그레이션을 사용하는 것이 좋습니다. 간격을 채우는 것이 좋습니다. 내가 생각하는 :

[dict setObject:[NSNumber numberWithBool:YES] forKey:NSInfersMappingModel];

하지만 당신은 그것을 한 번 확인해야합니다.

+1

예 ... 난 그냥 마커스 Zarra 코어 데이터의 책에서 그것을 발견 ... 그는 추가로 작성하지 않고 다음에 각 모델에서 마이그레이션 할 큰 절차를 쓴 감사합니다 나쁜 소식의 부활이 될 유감 매핑 모델. NSINfersMappingModel을 확인하려고합니다! –

+0

InfersMappingModel이 작동했습니다! 감사! –

+0

오버 헤드가 매우 빠르게 증가함에 따라 데이터 마이 그 레이션을 최소로 유지하십시오 (각 변경 사항에 대한 모든 버전의 모델을 현재 버전으로 매핑). 또한 한 버전에서 다음 버전으로 자동 마이그레이션을 사용할 수 있음을 유의하십시오 모델은 버전 16에서 21로 변경 될 수 있으므로 차이가있어 차이를 계산할 수 없습니다. 다행 이군. – MCannon

관련 문제