web-dev-qa-db-fra.com

Données de base - Échec de chargement du modèle optimisé sur le chemin

Certaines de ces impressions apparaissent dans ma console lors de l'exécution de mon application depuis Xcode 6 sur mon iPhone 6 avec iOS 9 beta 5:

CoreData: Impossible de charger le modèle optimisé dans le chemin '/var/mobile/Containers/Bundle/Application/0000000B-BDBC-0000-000B-0000FB00000B/Distribution.app/database.momd/database.omo'

Je ne trouve pas quelque chose à ce sujet, est-ce que quelqu'un a une idée de ce message?

69
Glauco Neves

J'ai rencontré ce problème et fait quelques recherches.

Je construis avec Xcode 6.4 et il semble que les données de base précédemment ne produisent qu'un fichier .mom dans le répertoire MyApp.ipa momd. Cette capture d'écran provient d'un projet ayant vu plusieurs versions de Xcode.

Notez que toutes les anciennes versions du modèle ont uniquement un fichier .mom. Je viens de créer une nouvelle version du modèle aujourd'hui, qui comporte à la fois un fichier .mom et un fichier .omo.

enter image description here

Il semble que Xcode 6.4 (et peut-être même certaines versions bêta 7.x) ne sachent pas comment charger la version optimisée du modèle de données car je reçois également le

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'

avertissement lors de la compilation avec 6.4. Cependant, lors de la compilation de l'application avec la dernière version de Xcode (7.0.1) sur l'App Store, je ne reçois pas cet avertissement. Je suppose que la solution de Mahesh fonctionne parce que la réécriture de l'ensemble du schéma crée le fichier .omo recherché par l'application dans le bundle d'applications.

La solution pour moi était de générer une nouvelle version de modèle de données dans les données de base, puis de la construire avec Xcode 7. Il semble que la création d'une nouvelle version de modèle crée le fichier de modèle optimisé. Dans mes tests cependant, même avec ce fichier créé, Xcode 6.4 génère toujours l'erreur. Ce n'est que lorsque j'ai essayé avec Xcode 7.0.1 que l'avertissement a disparu.

C'est une spéculation, mais je pense que si vous avez un projet existant et que vous n'avez pas créé de nouvelle version de modèle de données et construit avec Xcode 7, le fichier .omo est manquant. L'avertissement est lancé car il ne peut pas trouver le fichier. Cependant, si vous avez mis à jour votre modèle de données et construit avec Xcode 6.4, il semble que la version précédente de Xcode ne fonctionne pas correctement avec la version optimisée et ne la charge pas même si elle est là. Ce ne sont que mes observations cependant.

J'ai vérifié que j'avais un modèle optimisé (fichier .omo) à charger en procédant comme suit: 1. archivez votre projet 2. modifiez l'extension .ipa en .Zip 3. développez votre fichier Zip 4. cliquez sur le dossier "payload" Cliquez avec le bouton droit de la souris sur l’ensemble d’applications du dossier et sélectionnez "Afficher le contenu du paquet". 5. cliquez sur le répertoire .momd, vous devriez y voir tous vos modèles d'objet géré disponibles.

Si tout ce que vous avez est des fichiers .mom et pas de fichiers .omo, l'avertissement prend tout son sens, l'application ne peut pas ouvrir un fichier qui n'existe pas.

Dans mes tests, il semble que l'avertissement était uniquement informatif. Je n'ai jamais eu de crash à cause de cela. Il semble que les données de base tentent d’essayer de charger le modèle optimisé en premier, et si cela échoue, retombe dans le modèle .momd normal. Ceci est simplement ma spéculation cependant.

Je ne suis pas sûr que tout soit parfaitement correct, c’est ce que j’ai observé jusqu’à présent en essayant de déboguer ceci. Si quelqu'un d'autre peut apporter plus d'informations, vos commentaires sont les bienvenus.

11
digitalHound

J'ai rencontré ce problème ce matin. A fait un petit bidouillage pour le faire fonctionner. Je pense que cela a quelque chose à voir avec l'inadéquation des versions, mais je ne suis pas sûr.

Quoi qu'il en soit, si vous chargez un fichier momd, ajoutez simplement un "/[filename].mom" au fichier NSURL pour le faire fonctionner.

Dans mon cas, je chargeais le fichier Countly.momd et finis par faire ceci:

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

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

Mise à jour: J'utilisais un POD utilisant CoreData. Le fait de retirer le pod et d’ajouter la source, etc., du dépôt a fait disparaître le problème.

Donc, cela pourrait être un problème de pod.

4
DiAvisoo

J'ai trouvé une solution pour cela. J'ai réécrit tout le schéma et quand j'ai exécuté le code, je me suis débarrassé de ces avertissements des données de base.

Je suggère s'il vous plaît prendre de sauvegarde avant d'essayer cela.

J'espère que ça vous aide.

3
Mahesh

Je souhaite répondre aux personnes qui ont connu cela alors qu’elle écrivait son propre pod qui possède ses propres modèles CoreData. Probablement, vous avez mis votre définition de modèle dans le paquet (c'est bien), mais vous recherchez le fichier momd dans le mauvais paquet.

Disons que vous avez défini votre paquet dans podspec comme ceci:

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

Ensuite, vous devriez d’abord trouver ce paquet, puis localiser votre modèle à l’intérieur.

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

Vous pouvez donc continuer à créer la pile CoreData.

// Cela peut paraître un peu décalé car vous n'écriviez pas votre propre pod, mais votre réponse est au top de Google.

0
ReDetection