2010-04-26 2 views
4

이전에는 이미 데이터 모델 버전 1에서 버전 2로 자동 마이그레이션을 성공적으로 구현했습니다. 이제 SDK 3.1.3을 사용하여 마이그레이션 ". 작업을 완료 할 수 없습니다 (코코아 오류 134110.)"오류가있는 코어 데이터 마이그레이션 실패 : 처음으로 마이그레이션 한 후 새 저장소를 저장하지 못했습니다.

해결되지 않은 오류 오류 도메인 = NSCocoaErrorDomain 코드 = 134110 사용자 정보 = 0x5363360, { NSUnderlyingError = 오류 도메인 : 버전 2에서 버전 3은 다음과 같은 오류와 함께 실패 = NSCocoaErrorDomain 코드 = 256 UserInfo = 0x53622b0 "작업을 완료 할 수 없습니다 (코코아 오류 256)."; 이유 = "처음으로 마이그레이션 한 후 새 저장소를 저장하지 못했습니다."; }

나는 v3으로 v2에서 맵핑 모델을 제공하는 유일한 NSMigratePersistentStoresAutomaticallyOption 사용하여도 NSMigratePersistentStoresAutomaticallyOptionNSInferMappingModelAutomaticallyOption 및 마이그레이션을 사용하여 자동 마이그레이션을 시도했습니다.

위의 오류가 기록되고 응용 프로그램에서 사용할 수있는 개체가 없습니다. 그러나 응용 프로그램을 종료하고 다시 열면 모든 것이 제대로 작동합니다. 내가 사용하고

핵심 데이터 방법 나는 이것이 MYAPP ~ .sqlite 파일과 MYAPP.sqlite 파일을 생성하는 참조 다음과 같은 것들 시뮬레이터에서

- (NSManagedObjectModel *)managedObjectModel { 

    if (managedObjectModel != nil) { 
     return managedObjectModel; 
    } 



    NSString *path = [[NSBundle mainBundle] pathForResource:@"MYAPP" ofType:@"momd"]; 
    NSURL *momURL = [NSURL fileURLWithPath:path]; 
    managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL]; 

    return managedObjectModel; 

} 
- (NSManagedObjectContext *) managedObjectContext { 

    if (managedObjectContext != nil) { 
     return managedObjectContext; 
    } 


    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) { 
     managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [managedObjectContext setPersistentStoreCoordinator: coordinator]; 
    } 
    return managedObjectContext; 
} 



- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { 

    if (persistentStoreCoordinator != nil) { 
     return persistentStoreCoordinator; 
    } 


    NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MYAPP.sqlite"]]; 


    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
    [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 

    NSError *error = nil; 
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]]; 
    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) { 
     // Handle error 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    } 


return persistentStoreCoordinator; 

} 

있습니다. MYAPP ~ .sqlite 파일을 삭제하려고했지만

BOOL oldExists = [[NSFileManager defaultManager] fileExistsAtPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"MYAPP~.sqlite"]]; 

은 항상 NO를 반환합니다. 어떤 단서? 내가 뭔가 잘못하고 있는거야? 미리 감사드립니다.

+0

해결 했습니까? 나는 지금 정확히 동일한 문제를보고 있는데 오류 134110은 첫 번째 실행시 올바르게로드되지 않고 후속 실행시에만 발생합니다 (3.1.3 참고). 고객에게 매우 나쁜 사용자 경험 – coneybeare

답변

1

필자는 답변을 찾지 못했지만 많은 Apple 문서와 웹 게시물을 읽은 후이 문제도 만났습니다. 필자의 경우 수동 마이그레이션도 잘 수행되었지만 새로운 코디네이터를 열려고하면 같은 오류가 발생합니다. 마지막으로 데이터 모델의 마지막 작업 버전으로 돌아가서 일련의 작은 변경/버전을 수행하고 자동 마이그레이션 기능이 중단 된 곳을 살펴보고 더 자세히 살펴보기로 결정했습니다. 이제 엔티티, 속성 및 관계를 문제없이 추가 할 수 있으며 자동으로 마이그레이션됩니다. 데이터 모델의 임시 버전을 삭제할 가능성이 있습니까?

[coordinator MR_addAutoMigratingSqliteStoreNamed:storeFileName]; 

//HACK: lame solution to fix automigration error "Migration failed after first pass" 
if ([[coordinator persistentStores] count] == 0) 
{ 
    [coordinator performSelector:@selector(MR_addAutoMigratingSqliteStoreNamed:) withObject:storeFileName afterDelay:0.5]; 
} 

당신은 유사한 무언가를 시도 할 수 있습니다 : 그것은 가치가 무엇인지에 대한

+0

아니요, 방금 v2에서 v3으로 데이터 모델을 옮겼습니다. 이 과정에서 엔티티 2 개를 추가하고 엔티티를 제거하고 엔티티에 몇 가지 속성과 관계를 추가했습니다. 점진적으로 내 최종 v3 데이터 모델에 도달하라는 제안은 가치가 있습니다. 한 번에 하나씩 추가하여 실험 해보고 이것이 작동하는지 확인합니다. –

1

, 마법의 기록 코어 데이터 유틸리티 패키지는이 해킹을 포함한다. 문제의 원인에 대한 설명을 찾을 수 없었습니다. 또는 문제를 재 시도하는 것이 효과가있는 이유는 무엇입니까?

관련 문제