2009-11-21 4 views
5

두 개의 서로 다른 SQLite 저장소를 추가하는 관리 대상 개체 컨텍스트가 있습니다. Mananged Object Model의 구성을 사용하여 특정 엔터티를 한 저장소에 할당하고 다른 엔터티를 다른 개체에 할당합니다. 구성은 "UserDB"및 "MainDB"라고합니다.핵심 데이터 마이그레이션 오류 메시지 " '모델에'XYZ '구성이 없습니다.' '

자동 마이그레이션을 사용하기 전까지는 아무 문제없이 작동합니다. 새로운 Managed Object Model 버전을 만들고 UserDB 구성의 엔티티 중 하나에 새 속성을 추가 한 후에 저장소 관리자에게 이전 버전 저장소 (UserDB 관련 저장소의 경우)를 추가 할 때 예외가 발생합니다. '모델은 그렇지 않습니다. 'UserDB'구성을 포함합니다. ' Google에서이 오류에 대한 조회수를 찾을 수 없습니다. 누구든지 구성이있는 여러 매장을 사용하고 있습니까? 누구든지 내가 뭘 잘못하고 있을지 생각해?

스택은 다음과 같습니다

objc_exception_throw 
-[NSManagedObjectModel isConfiguration:compatibleWithStoreMetadata:] 
-[NSStoreMigrationPolicy sourceModelForStoreAtURL:metadata:error:] 
-[NSStoreMigrationPolicy(InternalMethods) _gatherDataAndPerformMigration:] 
-[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:] 
-[MyAppDelegate persistentStoreCoordinator] 
+0

이 문제도 마찬가지입니다. 마이그레이션 맵을 만들 때 똑같은 일이 발생합니까? – pokstad

답변

11

이 마이그레이션 + 구성 버그처럼 보인다. addPersistentStoreWithType을 호출 할 때 같은 동작을 반복하고 구성에 nil을 전달하여 문제를 해결할 수있었습니다. 마이그레이션이 발생하면 새로운 영구 저장소 조정자를 만들고 적절한 Configuration 문자열 인수를 사용하여 저장소를 다시 추가 할 수 있습니다.

이것은 내가 수행 한 두 번째 구성 관련 버그입니다. 분명히 잘 테스트 된 기능은 아닙니다.

+0

게시 해 주셔서 감사합니다. 이것은 참으로 내 문제였습니다. – awolf

+0

고마워,이 날 위해 일한 것 같습니다. – futureshocked

+0

흠, 지난 몇일 동안 씨름하고 있습니다. 이 솔루션은 "거의"작동합니다. 하지만 타이밍 문제가 붙어있는 것처럼 보입니다. 즉, 실행을 충분히 오래 중지하면 가끔씩 만 작동합니다. –

0

같은 문제가있었습니다. 팩트 패턴은 동일하고 오류 메시지는 동일합니다. 그러나 그것은 내 자신의 실수의 결과로 밝혀졌습니다.

예전 모델은 Blah.xcdatamodel이고 새로운 Blah 2.xcdatamodel이었습니다. 나는 나의 실수를 깨닫고 Blah 2를 만들기 전에 Blah를 변경하기 시작했다. 나는 그때 나의 버전 제어 시스템 (Git)을 사용하여 오래된 Blah로 되돌리고 Blah 2를 다시 만들었다. 모든 것이 올바르게 보였다. 하지만 되돌리기 프로세스에서 뭔가 잘못했을 것입니다. 왜냐하면, 현재 프로젝트 폴더의 Blah.xcdatamodel이 이전 버전의 앱을 빌드하는 데 사용했던 프로젝트 폴더의 Blah.xcdatamodel과 실제로 같았는지 다시 한 번 확인했기 때문입니다 (다행스럽게도 저는 버전 제어 시스템을 완전히 신뢰하지 않아서 출시 된 각 버전의 프로젝트 폴더 압축 파일을 항상 지키고 있습니다), Xcode에서 동일하게 보였지만 실제로는 다르다는 것을 알았습니다. 예를 들어 파일 크기가 다릅니다.

이전의 Blah를 현재 프로젝트 폴더로 대체했는데 Ken이 설명한 해결 방법이 필요없이 완벽하게 처리되었습니다.

Ken이 필연적으로 비슷한 실수를 한 것은 아닙니다.하지만이 메시지가 나타나면 마이그레이션 할 모델이 정말로 문제의 데이터를 만드는 데 사용 된 모델인지 확인하는 것이 중요합니다. .

+0

나는 그 문제가 실제로 해결되지 않았 음을 발견했다. 실제로 데이터가 실제로 처음으로 마이그레이션 되었기 때문에 두 번째로 작동 한 것 같습니다. 즉, 처음 실행하면 데이터가 이전되지만 "모델에 구성 'XYZ'메시지가 포함되지 않아 앱이 실패합니다. 그런 다음 두 번째로 잘 실행됩니다. 이것은 물론 좋은 사용자 경험이 아니기 때문에 Ken 's와 같은 2 단계 접근 방식을 채택해야했습니다. – jfewtr

+0

또한이 두 단계 접근 방식에는 최소한 나에게 있어서는 고유 한 문제가 있습니다. 즉, 사용자가 데이터를 마이그레이션 한 후 다른 응용 프로그램으로 전환 한 첫 번째 (그리고 첫 번째) 시간입니다. 저는 이것을 별도의 질문에 넣을 것입니다. – jfewtr

관련 문제