Le modèle utilisé pour ouvrir le magasin est incompatible avec celui utilisé pour créer le magasin
J'ai créé une Base de Données de modèle dans xcode 3.2 et après la mise à niveau dans Xcode 4.2, j'ai ensuite ajouté une nouvelle entité de la NSManagedObject sous-classe (reportez-vous à la nouvelle entité).
Première chose, il semble bizarre parce que ce n'est pas dans le même groupe que l'ancien. Voici la photo sur mon xcode 4.2 (AlkitabDB est celui que j'ai créé dans xcode 3.2, EndeDB est la nouvelle l'un de l'actuel xcode version(4.2):
Deuxième chose, je le laisse comme il est, alors j'ai accédé à la deuxième entité (le nouveau) de la même manière que la première entité (l'ancien), et l'erreur comme intitulé s'affiche.
Voici l'erreur:
2012-01-16 21:13:38.496 iHuria[55953:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0x8829cd0 {metadata=<CFBasicHash 0x882a370 [0x1839b38]>{type = immutable dict, count = 7,
entries =>
2 : <CFString 0x8829b90 [0x1839b38]>{contents = "NSStoreModelVersionIdentifiers"} = <CFArray 0x8829ff0 [0x1839b38]>{type = immutable, count = 0, values = ()}
4 : <CFString 0x8829bc0 [0x1839b38]>{contents = "NSPersistenceFrameworkVersion"} = <CFNumber 0x8829770 [0x1839b38]>{value = +320, type = kCFNumberSInt64Type}
6 : <CFString 0x8829bf0 [0x1839b38]>{contents = "NSStoreModelVersionHashes"} = <CFBasicHash 0x882a080 [0x1839b38]>{type = immutable dict, count = 1,
entries =>
0 : <CFString 0x882a010 [0x1839b38]>{contents = "AlkitabDB"} = <CFData 0x882a030 [0x1839b38]>{length = 32, capacity = 32, bytes = 0xd02ac5f8be6ab0b39add450aca202ac0 ... 3d45d462998d2ccd}
}
7 : <CFString 0x10e3aa8 [0x1839b38]>{contents = "NSStoreUUID"} = <CFString 0x8829e60 [0x1839b38]>{contents = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59"}
8 : <CFString 0x10e3948 [0x1839b38]>{contents = "NSStoreType"} = <CFString 0x10e3958 [0x1839b38]>{contents = "SQLite"}
9 : <CFString 0x8829c40 [0x1839b38]>{contents = "NSStoreModelVersionHashesVersion"} = <CFNumber 0x6b1c7c0 [0x1839b38]>{value = +3, type = kCFNumberSInt32Type}
10 : <CFString 0x8829c70 [0x1839b38]>{contents = "_NSAutoVacuumLevel"} = <CFString 0x882a0c0 [0x1839b38]>{contents = "2"}
}
, reason=The model used to open the store is incompatible with the one used to create the store}, {
metadata = {
NSPersistenceFrameworkVersion = 320;
NSStoreModelVersionHashes = {
AlkitabDB = <d02ac5f8 be6ab0b3 9add450a ca202ac0 ebd1e860 cbb578c2 3d45d462 998d2ccd>;
};
NSStoreModelVersionHashesVersion = 3;
NSStoreModelVersionIdentifiers = (
);
NSStoreType = SQLite;
NSStoreUUID = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59";
"_NSAutoVacuumLevel" = 2;
};
reason = "The model used to open the store is incompatible with the one used to create the store";
}
J'ai cherché la solution avant et j'ai découvert que j'devez supprimer l'application de simulateur et exécutez à nouveau l'application, et ça ne fonctionne pas.
Quelqu'un sait-il une solution pour ce problème?
S'il vous plaît aider.
source d'informationauteur dejoong
Vous devez vous connecter pour publier un commentaire.
Supprimer l'application dans le simulateur et d'effectuer un nettoyage sur votre projet. Que faut éclaircir ces questions. Assurez-vous que vous n'êtes pas en cours d'exécution dans le débogueur lorsque vous supprimez l'application sinon ça ne supprime pas réellement correctement.
Si vous voulez être sûr de son parti, vérifiez ce répertoire
Users/INSERT_YOUR_USER_HERE/Library/Application Support/iPhone Simulator/
pour votre application dans le dossier, en vertu de la version que vous utilisez.Note: C'est pour le développement. Pour la production, vous avez besoin pour mettre en œuvre une sorte de migration. Google "Base de Données de Migration", avec une légère migration étant le plus simple.
De supprimer l'application est parfois pas le cas! Suggérer, votre application a déjà été publié! Vous ne pouvez pas ajouter de nouvelles entités de la base de données et allez - y, vous avez besoin pour effectuer la migration!
Pour ceux qui ne veulent pas creuser dans la documentation, à la recherche d'une solution rapide:
Versioned core data model
sélectionnez votre nouvelle version de modèle de données pour l'actuel modèle de donnéesAppDelegate
et trouver où lespersistentStoreCoordinator
est en cours de créationif (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
nil
options avec@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES}
(effectivement prévu dans le code commenté dans la méthode)P. S. Ceci ne s'applique que pour la légèreté et la migration. Pour votre migration vers le qualifier comme une légère migration, vos modifications doivent être confinés
cette étroite bande:
Juste ajouter Options attribut lors de la création persistentStoreCoordinator dans AppDelegate.m de fichier pour les données de base de la méthode ci-dessous
OBJECTIVE-C
SWIFT
Il avait résolu mon problème..
Réponse : Supprimer l'application dans le Simulateur , Effectuer un Nettoyage et Re-Construire votre Projet.
Remarque : Chaque fois que vous effectuez des modifications à la Base de la définition des Données, Supprimer l'application installée sur le Périphérique Physique ou Simulateur, Nettoyez le Projet et Re-Construire à nouveau.
Oui. Une fois que vous supprimez l'application sur le périphérique physique et de reconstruction, il fonctionne.
Swift, dans AppDelegate.swift trouver la ligne
et de le remplacer avec
Chaque fois que vous apporter le changement à la Base définition de la Date, vous devez supprimer les applications installées sur le périphérique physique ou simulateur.
Product
- >Clean
La solution la plus simple qui a fonctionné pour moi dans Swift 2.1, Xcode 7 :
Supprimer l'application dans le Simulateur ( Cmd + Maj + H pour aller à l'Écran d'Accueil. Appuyez longuement sur l'application, Cliquez sur la croix, juste la façon habituelle de supprimer une application de votre téléphone)
Cmd + Maj + H de nouveau pour arrêter la danse des applications
Revenir à votre projet et exécutez à nouveau
J'ai eu ce problème lors de l'écriture/lecture à partir de la Base de Données avec les 2 sociétés. Supprimer l'application et de réexécuter le programme fixe la question
J'ai juste supprimé
[Simulator App Folder]/Document/*.sqlite
fichier après avoir fait des changements dans les entités et cela a fonctionné.Et bien sûr, .sqlite fichier contient toutes les données stockées et les structures qui seront perdues.
S'il vous plaît Supprimer une application de simulateur et le nettoyage d'un code et l'exécuter .son beau travail .il ne peut être son aide VOUS.
Si vous utilisez Swift.
Suivre la réponse par @Stas et les options d'insertion, à la place de néant, dans votre Délégué d'Application:
Essayer "Reset Content & Paramètres" dans le simulateur. A fonctionné pour moi, après la suppression de l'app et de construction Propre
J'ai connu le même problème avec mon application (pas encore sorti sur l'App Store).
Voici comment je l'ai corrigé:
(3) a été l'étape qui a finalement réussi à le faire fonctionner correctement. Espérons que cette aide!
Bien que parfois vous pouvez simplement supprimer l'application à partir de l'appareil lors de la modification de schéma dans la gestion de modèle d'objet, dans certains scénarios, ce n'est pas possible, par exemple parce que vous avez déjà publié votre application avec un vieux schéma.
Si c'est le cas, vous devez prendre soin de la migration des anciennes données vers le nouveau schéma:
Données de base Modèle de gestion des versions et la Migration de Données
Vous aurez besoin de migrer la Base de Données de modèle à l'aide de la migration. Chaque fois que vous modifiez le modèle, vous rendre incompatible sans contrôle de version. Accrochez-vous, c'est un peu un sujet poilue.
http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html
Si vous apportez des modifications à votre modèle de Données, vous devez fournir une politique de migration qui dit Base de Données comment adopter existants, d'objets persistants (que vos utilisateurs ont créé avec la version actuellement) pour le nouveau modèle.
Dans certains scénarios, la Base de Données est en mesure de déduire automatiquement la cartographie de l'ancien modèle de la nouvelle. Pour des modifications plus complexes, vous pourriez avoir à mettre en œuvre une logique qui effectue la migration.
De détails peuvent être trouvés dans la Données de base Modèle de gestion des versions et la Migration de Données Guide de Programmation.
Mise à jour
Cette réponse ici, sur un Débordement de Pile couvre les bases de la Base de Données légère de la migration et a aussi un peu de code pour obtenir vous avez commencé.
Ce problème se produit généralement en raison de incompatibilité entre la version sur laquelle DB a été créé. Approche générale à ce problème est de supprimer l'application et de la réinstaller. Mais dans votre cas la version de DB sont complètement différents sur Xcode 3.2 et 4.2. Afin de mieux utiliser la même version de Xcode DB.
Tout d'abord, les seules choses qui devraient être dans le
xcdatamodeld
bundle sontxcdatamodel
fichiers. Votre sous-classes doivent PAS être dans lexcdatamodeld
. Déplacer les sortir de là. Il y a de bonnes chances qu'ils soient confus le compilateur.Seconde, l'erreur indique que les Données de Base ne trouvez pas votre modèle. Avez-vous des données créées et puis il a touché le modèle? Si vous êtes donc dans un état incohérent et de la nécessité de corriger cela soit en supprimant les données (Philippe suggéré) ou en roulant vos modifications sur le modèle RETOUR.
J'obtenais l'erreur, mais la raison pour laquelle je reçois l'erreur était à cause de la suivante.
J'ai eu à l'origine une Entité nommée "Entrée" et avait une ligne enregistrée pour cette entité dans la base de données. J'ai ensuite ajouté une autre Entité du nom de "Personne" et après l'ajout qui est allé à construire et obtenu l'erreur. Donc, j'ai résolu le problème en supprimant "Personne" Entité, puis la construction de l'application, supprimé la ligne qui était en "Entrée", puis fermé l'application. J'ai ensuite supprimé l'app entièrement hors de mon téléphone, puis a fait une reconstruction et il a bien fonctionné. Pas sûr que l'étape corrigé le problème (la suppression de la ligne ou de l'application), mais j'espère que si vous êtes à la recherche d'une solution. 🙂
Edit: Oh, et si vous inquiet au sujet de la suppression de votre nouvelle Entité (dans mon cas "Personne") pour construire à nouveau l'application oubliez pas que vous pouvez le récupérer par la suite en utilisant CMD+Z!
J'ai eu ce problème - j'ai d'abord réinitialiser mon simulateur, puis nettoyer le projet et à reconstruire. Et puis il travaille.
Lorsque vous changer de base de données, ( ajout d'un champ à la table , la suppression de champ, etc ), le fichier sqlite dans les applications de document dossier doit être en harmonie avec votre schéma.
Ce fichier n'est pas écrasé par défaut, ce fichier doit être régénérée.
Suivez ces étapes:
Allez dans le dossier pointé par NSURL. (Ce chemin peut être trouvé dans le message de l'exception générée par l'application avant de s'écraser.)
exemple : /Utilisateurs//Bibliothèque/Application Support/iPhone Simulator//Applications//Documents
supprimer ou renommer le fichier sqlite
Cela permettra de s'assurer que le schéma et Xcode sont synchronisés.
Pour mac développement d'une application:
Il a travaillé pour moi, espérons que cela pourrait être utile.
Simulateur iOS -> Réinitialiser le Contenu et les Paramètres...
A fonctionné pour moi
Simulateur iOS -> Réinitialiser le Contenu et les Paramètres... -> Réinitialiser
Fonctionne sur iOS9 (xcode 7.1) ainsi