10
votes

Que faire lorsque vous obtenez "le modèle utilisé pour ouvrir le magasin est incompatible avec celui utilisé pour créer le magasin"?

J'ai eu une base de données entitédescription code> et j'ai créé des données dedans. Ensuite, j'ai changé l'entité entitydescription code>, ajouté Nouveau, supprimé l'ancien à l'aide de l'éditeur pour xcdatamodeld code> fichier.

N'importe lequel de mon code pour les données de base provoque cette erreur. "Le modèle utilisé pour ouvrir le magasin est incompatible avec celui utilisé pour créer le magasin}" code>. Le détail est ci-dessous. Que dois-je faire? Je préfère tout supprimer dans le modèle de données et redémarrer Nouveau. P>

Merci pour toute suggestion! p>

 reason=The model used to open the store is incompatible with the one used to create the store}, {
    metadata =     {
        NSPersistenceFrameworkVersion = 320;
        NSStoreModelVersionHashes =         {
            Promotion = <472663da d6da8cb6 ed22de03 eca7d7f4 9f692d88 a0f273b7 8db38989 0d34ba35>;
        };
        NSStoreModelVersionHashesVersion = 3;
        NSStoreModelVersionIdentifiers =         (
        );
        NSStoreType = SQLite;
        NSStoreUUID = "9D6F4C7E-53E2-476A-9829-5024691CED03";
        "_NSAutoVacuumLevel" = 2;
    };


1 commentaires

Je recommande la réponse à cette question similaire: Stackoverflow.com/questions/16185562/...


7 Réponses :


5
votes

S'il s'agit d'une application de non-production, supprimez simplement votre base de données locale (appname.sqlite) et redémarrez l'application.


0 commentaires

20
votes

ou si vous êtes en mode Dev, vous pouvez également supprimer l'application et l'exécuter à nouveau.


0 commentaires

6
votes

S'il s'agit d'une application de non-production, supprimez simplement votre base de données locale (appname.sqlite) et redémarrez l'application.

Je trouve que je fais toujours cela, et ainsi fournir les détails supplémentaires suivants:

sous Xcode 4 (4.3.2), vous devriez trouver votre magasin de données ici:

/ Utilisateurs / ~ / / Bibliothèque / Application Support / Iphone Simulator / Simulatulversion / Applications / OcAppIdentifier / Documents

ou vous pouvez utiliser des projecteurs, si vous activez d'abord la recherche de fichiers système; J'ai trouvé le plus rapide de sauvegarder une telle recherche dans la barre de menus.


0 commentaires

0
votes

J'ai fait face au même problème à l'aide de Xcode 7 Beta 1 et l'action suivante a résolu le problème. MENU == >> Cliquez sur la fenêtre> Projets> Sélectionnez Projet sur le côté gauche et cliquez sur le bouton Supprimer situé sur le côté droit. Si toujours ne fonctionne pas, => Réinitialisez le simulateur et exécutez l'application


0 commentaires

2
votes

Supprimez votre application sur Simulator et redémarrez:

sur simulator, allez au matériel -> Accueil: Entrez la description de l'image ici

Cliquez et maintenez le bouton de la souris enfoncé sur votre icône de l'application: Entrez la description de l'image ici

Cliquez sur "X" dans l'icône App pour supprimer:

Entrez la description de l'image ici

Retour à Xcode et redémarrez votre application (commande + r):
Entrez la description de l'image ici
ou:
Entrez la description de l'image ici

ps.: Si l'erreur apparaît à nouveau, consultez votre code car le problème doit être dans la syntaxe ou la différence entre ce que vous souhaitez énumérer avec le modèle de données que vous avez.


0 commentaires

1
votes

Réinitialisez votre simulateur et courez à nouveau. Si vous deviez exécuter avec un autre appareil dans le simulateur, cela fonctionnerait. Si vous utilisez un simulateur iPhone 6S et que vous essayez de courir 6s plus, cela fonctionnerait toujours sans réinitialisation.

Si vous utilisez sur un téléphone, assurez-vous de supprimer l'application et de la répercuter

 Ouvrir la liste déroulante


0 commentaires

11
votes

Suppression de l'application n'est parfois pas le cas! Suggérer, votre application a déjà été publiée! Vous ne pouvez pas simplement ajouter une nouvelle entité à la base de données et aller de l'avant - vous devez effectuer une migration!

Pour ceux qui ne veulent pas creuser dans la documentation et recherchent une solution rapide:

Ouvrez votre fichier .xcdatamodeld

Cliquez sur Editeur

Sélectionnez Ajouter une version modèle ...

Ajouter une nouvelle version de votre modèle (le nouveau groupe de DataModels ajoutés)

Sélectionnez le fichier principal, ouvrir l'inspecteur de fichiers (panneau de droite) et sous le modèle de données de base versé, sélectionnez votre nouvelle version du modèle de données pour le modèle de données actuel

Ce n'est pas tout), vous devriez effectuer une "migration lumineuse".

Allez à votre Appdelegate et trouvez où le persistantstorecoordinator est en cours de création

Recherchez cette ligne si (! [_ PersistentStorecoordinator AddPersistentStorewithType: NSSQLITESTOREType Configuration: NIL URL: StoreURL Options: NIL Erreur: & Erreur])

Remplacez les options NIL avec @ {NSMIGRACERPERSISTESTOREUTOMATEMENTEUROMATEMENTATEMENTATEMATEMOPTION: @yes} (réellement fourni dans le code commenté dans cette méthode)

Vous allez vous amuser! P.s. Cela ne s'applique que pour la migration légère. Pour que votre migration soit qualifiée de migration légère, vos modifications doivent être confinées à cette bande étroite:

Ajouter ou supprimer une propriété (attribut ou relation). Faire une propriété non ouvertante en option. Faites un attribut facultatif non optionnel, tant que vous fournissez une valeur par défaut. Ajouter ou supprimer une entité. Renommer une propriété. Renommer une entité.

réponse empruntée à partir de Stas


2 commentaires

Sélectionnez le fichier principal, ouvrez l'inspecteur de fichiers (panneau de droite) et sous le modèle de données de base versé, sélectionnez votre nouvelle version du modèle de données pour le modèle de données actuel. Je n'ai pas pu comprendre cette étape. Alors je l'ai sauté et il a toujours résolu mon problème. Pouvez-vous expirer cette étape si possible?


C'est la bonne réponse. Merci, je devais mettre à jour un ancien projet, c'est la procédure correcte qui corrige le problème