2011-10-31 7 views
3

핵심 데이터를 사용하는 앱이 있습니다. 다음 버전에서는 이미 존재하는 엔티티에 새로운 엔티티를 추가하고 싶습니다.핵심 데이터에 엔티티 추가

그냥 새 것을 추가 한 다음 소프트웨어에서 채우는 것이 좋을까요? 아니면 제가 생각해야 할 부분이 있습니까?

답변

15

입니다. 가장 쉬운 방법은 유추 된 매핑 모델을 사용하여 간단한 마이그레이션을하는 것입니다. 즉, 마이그레이션을 수행하고 소프트웨어가 나머지를 처리하도록 지정하는 것입니다. 그러나주의해야 할 것은 특정 종류의 변경에만 대처할 수 있다는 것입니다. 엔터티를 추가하는 것이 좋습니다.

경량 마이그레이션을 사용하려면, 당신은 당신의 영구 저장소 열 때 몇 가지 옵션을 전달해야합니다

NSMutableDictionary *options = [[NSMutableDictionary alloc] init]; 
[options setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption]; 
[options setObject:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption]; 

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

데이터 모델의 변경을 할 때 수행하는 하나의 마지막 일을, 당신은 추가해야 모델 버전. Xcode 4의 경우 사이드 바에서 데이터 모델을 선택하고 편집기 메뉴에서 모델 버전 추가를 선택한 다음 새 버전의 이름을 지정하십시오. 그런 다음 새 버전을 활성 상태로 설정해야합니다. 왼쪽 사이드 바에서 기본 데이터 모델 파일을 다시 선택한 다음 오른쪽 사이드 바의 첫 번째 탭에 "Versioned Data Model"팝업 메뉴가 있어야합니다.

이것은 매우 중요합니다. 마이그레이션을 수행하려면 Core Data에 이전 저장소가 생성 된 모델 버전과 마이그레이션 할 버전이 필요합니다. 이전 버전이 없으면 이주가 실패합니다.

+0

감사합니다. Amorya. 나중에 엔티티를 추가해야하는 앱이 하나 있습니다. 현재로서는 버전이 없지만, 맞다면 엔티티를 추가 할 때 버전을 추가해야합니다. – Jorgen

1

모델을 변경하는 것은 어려운 작업입니다. 이론적으로 엔티티를 추가하는 것이 쉬워야하지만, 애플은 그 작업을위한 마이그레이션 도구를 내장했다. (기존 데이터의 구조를 변경하는 경우)

이전에 코어 데이터 데이터베이스를 마이그레이션했지만 MAC OS에서 마이그레이션 한 지 2 년이 넘었습니다.

여기 마이그레이션 유형의 몇 거기 가이드

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreDataVersioning/Introduction/Introduction.html

+0

고마워요. 매우 무서워 보인다. 엔티티를 처음부터 설정하고 이후 버전에서 채울 수 있다면 아마 더 좋을 것입니다. 동영상 재생 목록이지만이 단계에서는 제목을 알지 못합니다. – Jorgen

+0

예, 첫 번째 마이 그 레이션이 마지막 이었음을 확인했습니다 :) ... (예측할 수없는 데이터 필수품 제외) –

관련 문제