2011-04-06 4 views
2

새 모델 버전을 추가했는데 코어 데이터 모델을 설정하여 새 버전을 사용했지만 응용 프로그램을 시작하려고하면이 오류가 발생합니다.새 코어 데이터 모델 버전을 추가 한 후 오류가 발생했습니다.

"영구 저장소를 여는 데 사용되는 관리되는 개체 모델 버전이 영구 저장소를 만드는 데 사용 된 버전과 호환되지 않습니다." 나는이 문제를 추측하고있어

enter image description here

는 현재 영구 저장소 모델의 이전 버전 것입니다. 새로운 것을 만들 수 있도록 삭제하는 방법이 있습니까? 그 데이터를 저장하는 데 신경 쓰지 않습니다.

답변

7

버전간에 마이그레이션해야합니다. Apple의 문서에 따르면 변경 사항이 간단하면 간단한 마이그레이션을 수행 할 수 있습니다. NSPersistentStoreCoordinator에이 옵션을 추가

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweight.html#//apple_ref/doc/uid/TP40008426-SW1

이 작동하는 것 같았다.

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

    NSURL *url = [applicationFilesDirectory URLByAppendingPathComponent:@"YOURAPP.storedata"]; 
     persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom]; 
     if (![persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:options error:&error]) { 
      [[NSApplication sharedApplication] presentError:error]; 
      [persistentStoreCoordinator release], persistentStoreCoordinator = nil; 
      return nil; 
     } 

    return persistentStoreCoordinator; 
0

앱이 문서를 저장 한 곳을 찾아서 휴지통에 버립니다.

그러나 확장 된 주석으로 당신에 NSPersistentStoreCoordinator 모두 명시 적 및 암시 마이그레이션 주위의 가능성과 옵션을 검토 할 수 있습니다.

- (NSPersistentStore *)addPersistentStoreWithType:(NSString *)storeType configuration:(NSString *)configuration URL:(NSURL *)storeURL options:(NSDictionary *)options error:(NSError **)error

버전은 당신이 일이 얻을 수있는 방법을 다른 따라 또한 자동적 NSMigratePersistentStoresAutomaticallyOption & NSInferMappingModelAutomaticallyOption

프로그래머

0에게 건네

4

"귀하의 질문에 대한 답변에서"새 것으로 만 만들 수 있도록 삭제할 수있는 방법이 있습니까? "

예. 다음과 같이

그냥 앱 위임에 persistentStoreCoordinator 게터을 변경

- (NSPersistentStoreCoordinator *) persistentStoreCoordinator { 
    if (persistentStoreCoordinator) return persistentStoreCoordinator; 
    NSManagedObjectModel *mom = [self managedObjectModel]; 
    if (!mom) { 
    NSAssert(NO, @"Managed object model is nil"); 
    NSLog(@"%@:%s No model to generate a store from", [self class], (char *)_cmd); 
    return nil; 
    } 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSString *applicationSupportDirectory = [self applicationSupportDirectory]; 
    NSError *error = nil; 
    if (![fileManager fileExistsAtPath:applicationSupportDirectory isDirectory:NULL]) { 
    if (![fileManager createDirectoryAtPath:applicationSupportDirectory withIntermediateDirectories:NO attributes:nil error:&error]) { 
     NSAssert(NO, ([NSString stringWithFormat:@"Failed to create App Support directory %@ : %@", applicationSupportDirectory,error])); 
     NSLog(@"Error creating application support directory at %@ : %@",applicationSupportDirectory,error); 
     return nil; 
    } 
    } 
    NSURL *url = [NSURL fileURLWithPath: [applicationSupportDirectory stringByAppendingPathComponent: @"storedata"]]; 
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: mom]; 
    if (![persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType 
               configuration:nil 
                  URL:url 
                 options:nil 
                 error:&error]){ 
    // EDIT: if error opening persistent store, remove it and create a new one 
    if([[error domain] isEqualToString:@"NSCocoaErrorDomain"] && [error code] == 134100) { 
     NSLog(@"Core Data model was updated. Deleting old persistent store."); 
     [[NSFileManager defaultManager] removeItemAtURL:url error:nil]; 
     if (![persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType 
               configuration:nil 
                  URL:url 
                 options:nil 
                 error:&error]){ 
     [[NSApplication sharedApplication] presentError:error]; 
     [persistentStoreCoordinator release], persistentStoreCoordinator = nil; 
     return nil; 
     } 
    } else { 
     [[NSApplication sharedApplication] presentError:error]; 
     [persistentStoreCoordinator release], persistentStoreCoordinator = nil; 
     return nil; 
    } 
    // 
    }  
    return persistentStoreCoordinator; 
} 
관련 문제