Impossible d'ouvrir une modèle Core Data sous Xcode

Bonjour à  tous,


(tout ceux qui sont là  en tout cas, en ce beau mois d'août ...)


 


Je n'arrive tout simplement pas à  éditer mon modèle Core Data sous Xcode. Seul l'éditeur Preview (ou Quick Look sous Xcode 7) est disponible sur mon modèle. (copie d'écran en pièce jointe).


 


Je vais vous dire tout ce que j'ai fait, sans succès, jusqu'à  présent.


Au départ tout allait bien, enfin ... je croyais que tout allais bien. J'avais un modèle Xcode bien sous tout rapport, édité plusieurs fois sans problème.


Puis j'ai décidé de transformer mon modèle standard en modèle versionné, en changeant le type dans l'inspecteur du fichier. À partir de là  seul l'éditeur Preview est disponible. Si je reviens en arrière et reconverti mon fichier en modèle standard l'éditeur revient. Mais ce n'est pas une solution, même si ce n'est pas primordial aujourd'hui, car mon application n'est pas encore en exploitation, j'aurai forcément besoin un jour de gérer les versions de modèles.


 


J'ai recherché sur le forum et plus largement sur Internet : le problème arrive de temps en temps, mais il n'y a pas de solution définitive, des bricolos qui fonctionnent dans certains cas particuliers, ni même de diagnostic. Mes tentatives jusqu'à  présent :


- relancer Xcode


- rebooter la machine


- bricoler le XML du Contents du paquet (supprimer la section <elements>)


- créer un nouveau Modèle Core Data dans le projet ; il est éditable car de type Standard à  la création, mais ça fait pareil lorsque je le change en modèle versionné


- créer un nouveau projet avec Core Data : pareil


- changer de Xcode (c'est l'occasion de tester Xcode 7) : toujours pareil !


 


Et là  je suis sec. Je n'ai plus de nouvelles idées à  essayer ...


 


J'ai l'impression que j'ai un template de modèle Core Data vérolé, installé quelque part et utilisé par tous mes Xcodes.


 


 


Mots clés:

Réponses

  • AliGatorAliGator Membre, Modérateur

    j'ai décidé de transformer mon modèle standard en modèle versionné, en changeant le type dans l'inspecteur du fichier.

    Heu ?

    Tu veux dire que tu as changé le format à  utiliser pour interpréter le fichier dans le panneau de droite de Xcode quand tu avais ton xcdatamodel sélectionné ? C'est pas comme ça qu'on convertit un modèle standard en modèle versionné, forcément ça va pas bien marcher comme ça :D

    Ce dropdown dans l'inspecteur à  droite dans Xcode sert à  lui indiquer comment il doit interpréter le fichier. Par exemple s'il croit que ton fichier ".m" est un fichier de code source Objective-C, mais que toi en fait tu veux lui dire "non non, pour ce fichier là  en fait c'est un fichier Matlab, qui a la même extension mais c'est pas pareil". En gros ça ne modifie en rien le fichier, ça ne va pas convertir le fichier ou quoi que ce soit, ça va juste lui dire comment *interpréter* le fichier.

    Un modèle CoreData versionné ("xcdatamodeld") n'est pas le même format qu'un modèle CoreData standard. (En fait si tu veux tout savoir, un "xcdatamodeld" c'est un bundle, contenant un "xcdatamodel" par version + un fichier indiquant la version courante). Du coup c'est normal que juste en changeant le dropdown pour lui dire d'interpréter ton fichier à  l'extension "xcdatamodel" d'une façon différente (comme un fichier CoreData versionné) il n'arrive plus à  te l'afficher dans Xcode, car c'est comme si tu lui disais de lire de l'anglais en insistant pour lui dire "mais si je te dis que c'est du Français, vas-y, lis le en Français !" :P

    Ce qu'il faut donc que tu fasses, c'est que tu *convertisses* effectivement ton modèle CoreData standard en modèle CoreData versionné. Pas juste que tu demandes à  Xcode de l'interpréter comme tel.

    Pour cela, sélectionnes ton fichier xcdatamodel dans Xcode (après avoir remis le bon format d'interprétation dans le panneau de l'inspecteur, hein...) et va dans le menu "Editor" > "Add Model Version...".
  • C'est fou comme c'est facile !


     


    Je pensais juste qu'on ne pouvait pas ajouter de version à  un modèle simple.


     


    Truc bizarre quand même, le type du bundle ne change pas, il reste modèle Core Data. Si je le force à  versionné, ça ne marche pas comme précédemment. Mais tout fonctionne correctement semble-t-il.


     


    Merci Maà®tre AliGator.


  • Le mystère s'épaissit !


     


    J'ai regardé comment est fichu le nouveau Bundle de mon modèle versionné qui fonctionne. Et bien c'est exactement la même chose que le Bundle qui est fabriqué par Xcode lorsque l'on change son type par l'inspecteur de fichier (et qui ne fonctionne pas) :


    - changer le type par l'inspecteur de fichier, ou bien par Editor>Add Model Version, cela crée EXACTEMENT le même bundle


    - mais dans un cas il n'est pas reconnu par Xcode (car de type "versionné") et dans l'autre cas Xcode fonctionne (car le type reste "Défaut", il n'est pas modifié en versionné)


     


    En fait c'est exactement le contraire de ce que dit AliGator qui se passe ...


     




    Ce dropdown dans l'inspecteur à  droite dans Xcode sert à  lui indiquer comment il doit interpréter le fichier.


    ...


    En gros ça ne modifie en rien le fichier, ça ne va pas convertir le fichier ou quoi que ce soit, ça va juste lui dire comment *interpréter* le fichier




     


    - ce dropdown modifie bien le fichier


    - mais quand il indique le bon format de fichier (versionné dans mon cas), Xcode ne sait plus interpréter le fichier


     


    En d'autre terme c'est ce que j'appelle un bug de Xcode.


  • AliGatorAliGator Membre, Modérateur
    C'est dû au fait que dans le *.xcodeproj/project.pbxproj un fichier versionné (comme un xcdatamodeld) est représenté dans l'arbre XML par un <XCVersionGroup> alors que le fichier standard est un simple FileReference.


    Je pense qu'une fois que ton fichier a été converti en format versionné (bundle xcdatamodeld contenant les versions du modèle), si Xcode ne le reconnaà®t pas tout seul il suffit de l'enlever du projet Xcode et le ré-ajouter pour qu'il soit vu correctement par le noeud du pbxproj et donc affiché comme attendu dans Xcode.
Connectez-vous ou Inscrivez-vous pour répondre.