it-swarm.com.de

Kerndaten - Fehler beim Laden des optimierten Modells im Pfad

Ich erhalte einige dieser Drucke in meiner Konsole, während ich meine Anwendung von Xcode 6 auf meinem iPhone 6 mit iOS 9 Beta 5 aus starte:

CoreData: Fehler beim Laden des optimierten Modells unter dem Pfad '/var/mobile/Containers/Bundle/Application/0000000B-BDBC-0000-000B-0000FB00000B/Distribution.app/database.momd/database.omo'

Ich kann nichts dazu finden. Hat jemand eine Ahnung von dieser Nachricht?

69
Glauco Neves

Ich bin auf dieses Problem gestoßen und habe ein bisschen herumgegraben.

Ich habe mit Xcode 6.4 gebaut und es sieht so aus, als hätten Core-Daten nur eine .mom-Datei im Verzeichnis MyApp.ipa momd erstellt. Dieser Screenshot stammt aus einem Projekt, in dem mehrere Versionen von Xcode vorhanden waren.

Beachten Sie, dass alle älteren Modellversionen nur eine MOM-Datei enthalten. Ich habe heute eine neue Modellversion erstellt, die sowohl eine .mom- als auch eine .omo-Datei enthält.

enter image description here

Es sieht so aus, als ob Xcode 6.4 (und möglicherweise auch einige der Beta 7.x-Versionen) nicht weiß, wie die optimierte Version des Datenmodells geladen werden soll, da ich auch die bekomme

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'

warnung beim Kompilieren mit 6.4. Beim Kompilieren der App mit der neuesten App Store-Version von Xcode (7.0.1) wird diese Warnung jedoch nicht angezeigt. Ich vermute, dass der Grund, warum Maheshs Lösung funktioniert, darin besteht, dass beim erneuten Schreiben des gesamten Schemas die .omo-Datei erstellt wird, nach der die App im App-Bundle sucht.

Die Lösung für mich bestand darin, eine neue Datenmodellversion in den Kerndaten zu generieren und dann mit Xcode 7 zu erstellen. Es scheint, dass durch das Erstellen einer neuen Modellversion die optimierte Modelldatei erstellt wird. In meinen Tests wirft Xcode 6.4 auch mit dieser erstellten Datei noch den Fehler. Erst als ich es mit Xcode 7.0.1 ausprobierte, verschwand die Warnung.

Dies ist eine Spekulation, aber ich denke, wenn Sie über ein vorhandenes Projekt verfügen und keine neue Datenmodellversion erstellt und mit Xcode 7 erstellt haben, dass die .omo-Datei fehlt, wird die Warnung ausgegeben, da die Datei nicht gefunden werden kann. Wenn Sie jedoch Ihr Datenmodell versioniert und mit Xcode 6.4 erstellt haben, scheint es, dass die frühere Xcode-Version mit der optimierten Version etwas nicht richtig macht und sie auch dann nicht lädt, wenn sie vorhanden ist. Dies sind jedoch nur meine Beobachtungen.

Ich habe festgestellt, dass ich ein optimiertes Modell (.omo-Datei) zum Laden habe, indem ich Folgendes ausgeführt habe: 1. Archiviere dein Projekt 2. ändere die .ipa-Erweiterung in .Zip 3. erweitere deine Zip-Datei 4. klicke auf den "payload" -Ordner und klicken Sie mit der rechten Maustaste (oder per Cmd-Klick) auf das App-Bundle im Ordner und wählen Sie "Paketinhalt anzeigen". 5. Klicken Sie auf das Verzeichnis .momd. Dort sollten alle verfügbaren verwalteten Objektmodelle angezeigt werden.

Wenn Sie nur .mom-Dateien und keine .omo-Dateien haben, ist die Warnung durchaus sinnvoll, und die App kann keine Datei öffnen, die nicht vorhanden ist.

In meinen Tests hat die Warnung anscheinend nur zur Information gedient. Ich hatte nie einen Absturz deswegen. Es scheint, als ob die Kerndaten versuchen könnten, das optimierte Modell zuerst zu laden. Wenn dies fehlschlägt, greifen Sie auf das reguläre .momd-Modell zurück. Dies ist jedoch nur meine Spekulation.

Ich bin mir nicht sicher, ob hier alles völlig korrekt ist. Dies ist genau das, was ich bisher bei dem Versuch beobachtet habe, dies zu debuggen. Wenn jemand mehr Informationen beisteuern kann, freue ich mich über Ihre Beiträge.

11
digitalHound

Ich bin heute Morgen auf dieses Problem gestoßen. Habe einen kleinen Hack gemacht um es zum Laufen zu bringen. Ich denke, es hat etwas mit Versionsunterschieden zu tun, aber ich bin mir nicht sicher.

Wie auch immer, wenn Sie eine Momd-Datei laden, hängen Sie einfach einen "/[filename[.mom" an die NSURL an, damit sie funktioniert.

In meinem Fall habe ich die Datei Countly.momd geladen und Folgendes getan:

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

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

Update: Ich habe einen POD verwendet, der CoreData verwendet. Durch das Entfernen des Pods und das Hinzufügen der Quelle usw. aus dem Repo wurde das Problem behoben.

Es könnte also ein Pod-Problem sein.

4
DiAvisoo

Ich habe eine Lösung dafür gefunden. Ich habe das gesamte Schema neu geschrieben und beim Ausführen des Codes diese Warnungen aus den Kerndaten entfernt.

Ich schlage vor, dass Sie eine Sicherungskopie erstellen, bevor Sie dies versuchen.

Hoffe es hilft dir.

3
Mahesh

Ich möchte Leuten antworten, die darauf gestoßen sind, als sie einen eigenen Pod mit eigenen CoreData-Modellen geschrieben haben. Wahrscheinlich haben Sie Ihre Modelldefinition in das Bundle aufgenommen (das ist gut), aber Sie suchen nach der Datei momd im falschen Bundle.

Angenommen, Sie haben Ihr Bundle in podspec folgendermaßen definiert:

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

Dann sollten Sie zuerst dieses Bundle finden und dann Ihr Modell finden darin.

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]];

So können Sie den CoreData-Stack weiter erstellen.

// Das ist vielleicht ein bisschen unkonventionell, weil Sie keinen eigenen Pod geschrieben haben, aber Ihre Antwort steht ganz oben auf der Liste von Google.

0
ReDetection