2011-07-17 5 views
1

Xcode3에는 전혀 문제가 없었지만 핵심적인 데이터 모델을 업데이트 할 때 "영구 저장소 마이그레이션에 실패했습니다. 소스 관리 개체 모델이 누락되었습니다."라는 Xcode4와 함께 Apple 코드가 3 번에 약 1 번 실패합니다. 오류. Xcode4의 모델을 손상시키지 않고 올바르게 업데이트하려면 어떻게해야합니까?

  • 무시 애플의 모델 로딩 방법 애플의 템플릿에서

    1. NSPersistentDocument, 내가 할 수있는 유일한 방법은을 제공하는 것입니다 : 여기

      (나는 자동 마이그레이션 프로젝트를 구성하는 방법) 내 설정이다 자동 마이그레이션 여기
    -(BOOL)configurePersistentStoreCoordinatorForURL:(NSURL *)url ofType:(NSString *)fileType modelConfiguration:(NSString *)configuration storeOptions:(NSDictionary *)storeOptions error:(NSError **)error 
    { 
    
        NSMutableDictionary *newOptions = nil; 
    
        if(storeOptions != nil) 
         newOptions = [NSMutableDictionary dictionaryWithDictionary:storeOptions]; 
        else 
         newOptions = [NSMutableDictionary dictionary]; 
    
        [newOptions setValue:@"YES" forKey:NSMigratePersistentStoresAutomaticallyOption]; 
        [newOptions setValue:@"TRUE" forKey:NSInferMappingModelAutomaticallyOption]; 
    
        BOOL success = FALSE; 
    
        success = [super configurePersistentStoreCoordinatorForURL:url ofType:fileType modelConfiguration:configuration storeOptions:newOptions error:error]; 
    
        return success; 
    } 
    

    켤 storeOptions 사전에 두 플래그는 프로세스의 I (이미 Xcode4에서 약 1 버그를 작업하는!)를 사용하여 봤는데

    1. 이동 편집기 메뉴 (왼쪽 구불 구불으로, Xcode4에서 "something.xcdatamodel"라는 이름의) 모델을 선택, "새 모델 버전 추가 ..."를 선택하십시오.
    2. 마지막 버전보다 1 정수가 더 큰 이름을 지정하십시오. 모든 파일을 선택한 다음 선택 이전이 있다면 "4"XCode4 버그에 새로 생성 한
    3. 해결에 현재 모델 버전을 변경, 새 "5"오른쪽 창에서
    4. 이름 새롭게 생성 된 모델. 그렇지 않으면 Xcode에서 새로 만든 모델에 선택 항목을 표시하지만 대신 이전 모델을 편집하므로 CoreData의 모든 항목이 완전히 손상됩니다.
    5. 모델 편집; 이 경우 기존 엔티티에 새 속성을 추가합니다.
    6. 저장. 짓다. 운영. ... 크래시.

    내가 말했던 것을 제외하면, 3에서 약 2 번 올바르게 작동합니다. 한 번 작동하면 가볍게 마이그레이션이 완료되고 다음 저장으로 새 모델 버전이 저장됩니다 (분명히).

    나는 위의 단계에서 잘못하고있는 것이 있다고 생각하지만 문서를 5 ~ 6 회 읽었으며 명백한 것을 볼 수 없습니다. NSPersistentDocument 문서가 오래되었다는 것을 돕지는 못하지만, iPhone에서 가벼운 마이그레이션을 많이했기 때문에이 작업을 수행하는 데 상당한 자신감을 가지며 나에게 맞는 것 같습니다.


    다른 것들 내가 체크/시도했다 : - iPhone Core Data Lightweight Migration Cocoa error 134130: Can't find model for source store (아니, 유일한 루트 xcdatamodel 포함되고 있었다)

  • +0

    오류가 발생하면 오류가 발생합니까? – TechZen

    +0

    개발 빌드를 이전 하시겠습니까? – TechZen

    +0

    매번 같은 저장소를 계속 사용하고 있습니까? 아니면 매번 새로운 복사본으로 시작하고 있습니까? – TechZen

    답변

    0

    당신은 문제의 근원으로 손상된 개발 저장소를 제거했기 때문에, I Xcode 4.x에서 문제가 발생했다고 의심해보십시오. 많은 사람들이 비슷한 문제를보고하고 있지만 두 가지 문제는 정확히 같지 않습니다. 특정 데이터 모델 설정에서만 발생하는 버그 일 수 있으므로 문제를 추적하기가 매우 어려울 수 있습니다.

    자동 마이그레이션을 포기하고 명시 적 마이그레이션 맵을 작성하기 만하면됩니다. 시간이 오래 걸리고 코드가 복잡해 지지만 항상 작동합니다.

    배송 앱이 있고 야생에서 최종 사용자 데이터를 처리하는 경우 최종 사용자 데이터를 보호하기위한 추가 조치를 취할 도덕적 및 사업 적 의무가 있습니다.

    +0

    Xcode4의 CoreData 처리에는 명백한 버그가 많이 있습니다. 나는 분명히 * 내가 * 잘못하고 있다고 생각 했었습니다. "희망과 기다림"으로 애플을 고치십시오. – Adam

    3

    [NSNumber numberWithBool:YES]이 아닌 @"YES" 또는 @"TRUE"을 사용하십시오.

    +0

    NSString의 [boolValue]는 내장되어 있으며 제공된 코드와 정확히 일치하는 "YES"를 평가합니다 – Adam

    +0

    [NSNumber numberWithBool : x]는 NSString에서 boolValue를 호출하지 않습니다. 부울 값이 필요합니다. 항상 true로 평가됩니다. 즉, numberWithBool : @ "NO"는 이론적으로 YES (참)입니다. – lupinglade

    0

    나는 매우 혼란스러워했지만 이것은 작동하지 않았다. 왜냐하면 나는 그 방법이 이미 "store options"사전을 가지고 있다고 가정했기 때문에 나는 그것을 설정하기 전에 존재를 확인하기 만하면되었다. 전술 한 옵션 ...

    -(BOOL)configurePersistentStoreCoordinatorForURL:  (NSURL*)u 
                  ofType: (NSString*)t 
               modelConfiguration: (NSString*)c 
                storeOptions:(NSDictionary*)o 
                  error: (NSError**)e 
    { 
    return [super configurePersistentStoreCoordinatorForURL:u 
                    ofType:t 
                 modelConfiguration:c 
                  storeOptions: 
        o ? [o dictionaryWithValuesForKeys: 
         @[ NSMigratePersistentStoresAutomaticallyOption, @YES, 
          NSInferMappingModelAutomaticallyOption,  @YES]] 
         : @{ NSMigratePersistentStoresAutomaticallyOption :@YES, 
          NSInferMappingModelAutomaticallyOption  :@YES} 
                    error:e]; 
    }