Development Tip

핵심 데이터-경로에서 최적화 된 모델을로드하지 못했습니다.

yourdevel 2020. 10. 30. 21:06
반응형

핵심 데이터-경로에서 최적화 된 모델을로드하지 못했습니다.


iOS 9 베타 5가 설치된 iPhone 6의 Xcode 6에서 응용 프로그램을 실행하는 동안 콘솔에 이러한 인쇄 중 일부가 표시됩니다.

CoreData : '/var/mobile/Containers/Bundle/Application/0000000B-BDBC-0000-000B-0000FB00000B/Distribution.app/database.momd/database.omo'경로에서 최적화 된 모델을로드하지 못했습니다.

나는 이것과 관련된 것을 찾지 못했습니다. 누구든지이 메시지에 대한 단서가 있습니까?


나는이 문제에 부딪 쳤고 주위를 파헤 쳤다.

저는 Xcode 6.4로 빌드 해 왔으며 이전에 핵심 데이터가 MyApp.ipa momd 디렉토리에 .mom 파일 만 생성 한 것처럼 보입니다. 이 스크린 샷은 여러 버전의 Xcode를 본 프로젝트에서 가져온 것입니다.

모든 이전 모델 버전에는 .mom 파일 만 있습니다. 오늘 방금 새 모델 버전을 만들었고 .mom 및 .omo 파일이 모두 있습니다.

여기에 이미지 설명 입력

Xcode 6.4 (및 베타 7.x 버전 중 일부)도 데이터 모델의 최적화 된 버전을로드하는 방법을 모르는 것 같습니다.

2015-10-16 11:11:42.563 MyAppName[1767:599635] CoreData: Failed to load optimized model at path '/var/mobile/Containers/Bundle/Application/D887D60B-FB28-4059-8167-F573460D98F8/MyAppName.app/MyDataModel.momd/MyDataModel3_0Analytics.omo'

6.4로 컴파일 할 때 경고. 그러나 최신 앱 스토어 버전의 Xcode (7.0.1)로 앱을 컴파일 할 때 해당 경고가 표시되지 않습니다. Mahesh의 솔루션이 작동하는 이유는 전체 스키마를 다시 작성하면 앱이 앱 번들에서 찾고있는 .omo 파일이 생성되기 때문이라고 생각합니다.

저에게 해결책은 핵심 데이터에 새로운 데이터 모델 버전을 생성 한 다음 Xcode 7로 빌드하는 것이 었습니다. 새 모델 버전을 생성하면 최적화 된 모델 파일이 생성되는 것 같습니다. 내 테스트에서이 파일이 생성 된 Xcode 6.4에서도 여전히 오류가 발생합니다. 경고가 사라진 것은 Xcode 7.0.1로 시도하기 전까지는 아니 었습니다.

이것은 추측이지만 기존 프로젝트가 있고 새 데이터 모델 버전을 만들고 Xcode 7로 빌드하지 않은 경우 .omo 파일이 누락되어 파일을 찾을 수 없기 때문에 경고를 던지고 있다고 생각합니다. 그러나 데이터 모델의 버전을 지정하고 Xcode 6.4로 빌드 한 경우 이전 Xcode 버전이 최적화 된 버전으로 제대로 작업을 수행하지 않고있는 경우에도로드하지 않는 것 같습니다. 그래도 이것들은 내 관찰 일뿐입니다.

다음을 수행하여로드 할 최적화 된 모델 (.omo 파일)이 있는지 확인했습니다. 1. 프로젝트를 보관합니다. 2. .ipa 확장자를 .zip으로 변경합니다. 3. zip 파일을 확장합니다. 4. "payload"폴더를 클릭합니다. 폴더의 앱 번들을 마우스 오른쪽 버튼으로 클릭 (또는 cmd 클릭)하고 "패키지 내용 표시"를 선택합니다. 5. .momd 디렉터리를 클릭하면 사용 가능한 모든 관리 개체 모델이 표시됩니다.

.mom 파일 만 있고 .omo 파일이없는 경우 경고가 완전히 의미가있는 경우 앱이 존재하지 않는 파일을 열 수 없습니다.

내 테스트에서 경고는 정보 제공 용인 것 같습니다. 나는 그것 때문에 어떤 충돌도 없었습니다. 핵심 데이터가 최적화 된 모델을 먼저로드하려고 시도 할 수 있으며 실패하면 일반 .momd 모델로 돌아갑니다. 이것은 단지 내 추측입니다.

여기에있는 모든 것이 완전히 올바른지 확실하지 않습니다. 이것이 지금까지 디버깅을 시도하면서 관찰 한 것입니다. 다른 사람이 더 이상 정보를 제공 할 수 있다면 귀하의 의견을 환영합니다.


오늘 아침에이 문제가 발생했습니다. 실행하기 위해 작은 해킹을 했어. 버전 불일치와 관련이 있다고 생각하지만 확실하지 않습니다.

어쨌든, momd-file을로드하는 경우 NSURL에 "/[filename].mom"을 추가하면 작동합니다.

제 경우에는 Countly.momd 파일을로드하고이 작업을 완료했습니다.

// Original loading
NSURL modelURL = [[NSBundle bundleForClass:[CountlyDB class]] URLForResource:@"Countly" withExtension:@"momd"];

// Small hack
modelURL = [modelURL URLByAppendingPathComponent:@"Countly.mom"];

업데이트 : CoreData를 사용하는 POD를 사용하고있었습니다. 포드를 제거하고 저장소에서 소스 등을 직접 추가하면 문제가 해결되었습니다.

따라서 포드 문제 일 수 있습니다.


이에 대한 해결책을 찾았습니다. 전체 스키마를 다시 작성하고 코드를 실행했을 때 핵심 데이터에서 이러한 경고를 제거했습니다.

이것을 시도하기 전에 백업을 수행하는 것이 좋습니다.

도움이되기를 바랍니다.


CoreData 모델이있는 자신의 pod를 작성할 때이 문제를 겪은 사람들에게 대답하고 싶습니다. 아마도 모델 정의를 번들에 넣었지만 (좋습니다) momd잘못된 번들에서 파일 을 검색 했을 것입니다.

다음과 같이 podspec에 번들을 정의했다고 가정 해 보겠습니다.

'MYPodBundle' => [
    'Model/*.{xcdatamodeld,xcdatamodel}'
]

그런 다음 먼저이 번들을 찾은 다음 그 안에있는 모델을 찾아야합니다 .

NSURL *bundleURL = [[NSBundle bundleForClass:[MYEntity class]] URLForResource:@"MYPodBundle" withExtension:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithURL:bundleURL];
NSString *modelPath = [bundle pathForResource:@"MYCoreDataModel" ofType:@"momd"];
NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:modelPath]];

따라서 CoreData 스택을 계속 생성 할 수 있습니다.

// 자신의 포드를 작성하지 않았기 때문에 주제에서 약간 벗어난 것일 수 있지만 답변은 Google 상단에 있습니다.

참고 URL : https://stackoverflow.com/questions/32233939/core-data-failed-to-load-optimized-model-at-path

반응형