2012-08-15 3 views
2

기존 핵심 데이터 세트가 있으며 여기에 엔티티를 추가하려고합니다. 기존 사용자를 새로운 모델로 전환하기 위해 새로운 엔티티를 추가 한 후에 간단한 마이그레이션을 사용할 수 있는지 여부에 대해 다소 혼란 스럽습니다.coredata에 새 항목 추가 - 간단한 마이그레이션을 계속 사용할 수 있습니까?

현재 모달입니다 (단지 보여주는 엔티티) :

Story 1toMany-> Sentences 

내가이 필요합니다

Story 1toMany-> Sentences 1toMany-> Media 

내가이 작업을 수행 할 경량 마이그레이션 도구를 사용할 수 있습니까?

나는 documentation에서 읽은 :의

간단한 또한 : 코어 데이터는 추정 맵핑 모델을 생성 할 수 있으려면

이 변경 예를 들어, 명백한 이동 패턴에 맞게해야한다 새 특성 특성 제거 A 비 필수 속성이 선택 가능 선택적 속성 이 비 선택적으로되고 기본값 정의 엔터티의 이름 바꾸기 또는 속성

그러나 this question은 엔티티 추가로 가벼운 마이그레이션이 여전히 작동 할 것입니다. 새로운 미디어 엔티티가 선택 사항이므로 실제로 어떻게 문제가되는지 알 수 없습니다.

답변

3

wwdc 2010에서 핵심 데이터 비디오 "마스터 링 핵심 데이터"를 확인하십시오. 특정 사례의 마이그레이션에 대해 설명합니다. 길고도 간단합니다. 예, 간단한 마이그레이션을 사용할 수 있습니다. NSPersistentStoreCoordinator 인스턴스를 초기화 할 때 그냥 옵션 사전을 전달합니다

NSDictionary *dictionary=[NSDictionary dictionaryWithObjects:@[ [NSNumber numberWithBool:YES], [NSNumber numberWithBool:YES]] forKeys:@[ NSMigratePersistentStoresAutomaticallyOption, NSInferMappingModelAutomaticallyOption]]; 
+0

MIgration은 동영상에서 45:42부터 시작됩니다. –

3

예, 당신은 가능성이 가벼운 마이그레이션을 사용할 수 있습니다. 내 경험에 비추어 볼 때 아래에 모델 버전 추가 ... 전에 CoreData 모델을 변경해야합니다. 이 방법은 맵핑하기 전과 후의 시나리오가 있습니다. 그런 다음 새 모델을 현재 모델로 설정해야합니다. (이제 핵심 데이터 모델에 엔터티를 추가 할 수 있습니다. 올바른 모델로 작업하고 있는지 확인하십시오.)

마지막으로 PersistentStoreCoordinator를 초기화하는 옵션을 전달해야합니다.

NSError *error = nil; 
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool: YES],NSMigratePersistentStoresAutomaticallyOption,[NSNumber numberWithBool:YES],NSInferMappingModelAutomaticallyOption, nil]; 
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {... 
관련 문제