Ich habe in xcode 3.2 ein Core Data-Modell erstellt und nach dem Upgrade in Xcode 4.2 eine neue Entität der NSManagedObject-Unterklasse hinzugefügt (siehe neue Entität).
Als erstes sieht es komisch aus, weil es nicht in der gleichen Gruppe wie die alte ist. Hier ist das Bild auf meinem xcode 4.2 (AlkitabDB ist das Bild, das ich in xcode 3.2 erstellt habe, EndeDB ist das neue Bild aus der aktuellen xcode-Version (4.2):
Zweitens lasse ich es so wie es ist, dann habe ich auf die zweite Entität (die neue) auf die gleiche Weise zugegriffen wie auf die erste Entität (die alte), und der Fehler mit dem Titel wird angezeigt.
Hier ist der Fehler:
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";
}
Ich habe vorher nach der Lösung gesucht und festgestellt, dass ich die Anwendung aus dem Simulator entfernen und die App erneut ausführen sollte, und es hat nicht funktioniert. Kennt jemand eine Lösung für dieses Problem? Bitte helfen Sie.
let options = [ NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption:true ]
Entfernen Sie die App aus dem Simulator und führen Sie eine Bereinigung Ihres Projekts durch. Das sollte diese Probleme klären. Stellen Sie sicher, dass Sie nicht im Debugger ausgeführt werden, wenn Sie die App löschen, da sie sonst nicht ordnungsgemäß gelöscht wird.
Wenn Sie sicher sein möchten, dass es nicht mehr vorhanden ist, überprüfen Sie dieses Verzeichnis
Users/INSERT_YOUR_USER_HERE/Library/Application Support/iPhone Simulator/
unter der von Ihnen ausgeführten Version auf den Ordner Ihrer App.Hinweis: Dies ist nur für die Entwicklung. Für die Produktion müssen Sie eine Art Migration implementieren. Google "Core Data Migration", wobei die einfache Migration die einfachste ist.
quelle
Fügen Sie einfach das Attribut Options hinzu , während Sie persistentStoreCoordinator in der Datei AppDelegate.m für die Kerndatenmethode wie folgt erstellen
ZIEL C
SCHNELL
Es hatte mein Problem gelöst ..
quelle
Antwort: Entfernen Sie die App aus dem Simulator, führen Sie eine Bereinigung durch und erstellen Sie Ihr Projekt neu.
Hinweis: Wenn Sie Änderungen an der Kerndatendefinition vornehmen, löschen Sie die auf dem physischen Gerät oder Simulator installierte App, bereinigen Sie das Projekt und erstellen Sie es erneut.
quelle
Ja. Sobald Sie die App auf einem physischen Gerät löschen und neu erstellen, funktioniert sie.
quelle
Suchen Sie für schnell in AppDelegate.swift die Zeile
und ersetzen Sie es durch
quelle
Ich habe gerade einige Tage damit verbracht, diesen Fehler zu bekämpfen, zusammen mit MergelModelFromBundles zu stürzen und den Fehler "Modelle können nicht mit zwei verschiedenen Entitäten namens * zusammengeführt werden" zu erhalten.
Es stellte sich heraus, dass das Hauptproblem darin bestand, dass Xcode keine alten Ressourcen von Geräten entfernt und ich alte Versionen meines Datenmodells (.mom-Dateien) hatte, die Konflikte verursachten. Aus diesem Grund wurde das Problem durch Löschen der App auf einem meiner Geräte behoben.
Nachdem ich diesen Blog-Beitrag über eine andere SO-Antwort gefunden hatte, machte ich meine App toleranter gegenüber alten Modellen, indem ich diese Zeile änderte, die nach ALLEN .mom-Dateien sucht:
dazu, was nur im Filterverzeichnis aussieht:
Ich habe recursivePathsForResourcesOfType aus dieser Frage verwendet : Um dies herauszufinden, protokollieren Sie alle .mom-Dateien in der App:
Ich habe auch iExplorer verwendet , um die fremden .mom-Dateien anzuzeigen (ich habe noch nicht versucht, sie zu löschen).
Die folgende Methode war ebenfalls hilfreich. Es zeigte sich, dass sich eine Entität in dem zusammengeführten Modell befand, das von [psc manageObjectModel] zurückgegeben wurde und in keinem meiner Modelle oder im Geschäft selbst mehr vorhanden war. Dies ließ mich glauben, dass ein altes Modell auf dem Gerät selbst zwischengespeichert wurde, das durch ein sauberes Gebäude nicht entfernt wurde. Die Methode protokolliert jede Entität, die identisch ist, geändert, hinzugefügt oder aus dem Modell entfernt wurde. (geschrieben mit dieser SO-Antwort als Ausgangspunkt):
Verwendung: Wird aufgerufen, bevor jeder Speicher zu NSPersistentStoreCoordinator hinzugefügt wird:
quelle
Jedes Mal, wenn Sie Änderungen an der Core Date-Definition vornehmen, sollten Sie die auf dem physischen Gerät oder Simulator installierten Apps löschen.
quelle
Product
->Clean
quelle
Die einfachste Lösung, die in Swift 2.1, Xcode 7 für mich funktioniert hat, ist:
Löschen Sie die App aus dem Simulator (Befehlstaste + Umschalt + H, um zum Startbildschirm zu gelangen. Drücken Sie lange auf die App. Klicken Sie auf Kreuz, wie gewohnt, um eine App von Ihrem Telefon zu löschen.)
Cmd + Shift + H erneut, um das Tanzen von Apps zu stoppen
Gehen Sie zurück zu Ihrem Projekt und führen Sie es erneut aus
Ich hatte dieses Problem beim Schreiben / Lesen von Core Data mit 2 eingerichteten Entitäten. Das Löschen der App und das erneute Ausführen des Programms haben das Problem behoben
quelle
Ich habe gerade die
[Simulator App Folder]/Document/*.sqlite
Datei gelöscht , nachdem ich Änderungen an Entitäten vorgenommen hatte, und es hat funktioniert. Und natürlich enthält die .sqlite-Datei alle gespeicherten Daten und Strukturen, die verloren gehen.quelle
Bitte löschen Sie eine Anwendung aus dem Simulator und bereinigen Sie einen Code und führen Sie .its funktioniert einwandfrei.
quelle
Wenn Sie Swift verwenden.
Folgen Sie der Antwort von @Stas und fügen Sie anstelle von Null Optionen in Ihren App-Delegaten ein:
quelle
Versuchen Sie "Inhalt & Einstellungen zurücksetzen" im Simulator. Arbeitete für mich nach dem Löschen der App und Clean Build
quelle
Ich hatte das gleiche Problem mit meiner App (noch nicht im App Store veröffentlicht).
So habe ich es behoben:
(3) war der Schritt, der es endlich richtig laufen ließ. Hoffe das hilft!
quelle
Obwohl Sie die App manchmal einfach vom Gerät entfernen können, wenn Sie das Schema im verwalteten Objektmodell ändern, ist dies in einigen Szenarien nicht möglich, z. B. weil Sie Ihre App bereits mit einem alten Schema veröffentlicht haben.
In diesem Fall müssen Sie darauf achten, alte Daten in das neue Schema zu migrieren:
Kerndatenmodellversionierung und Datenmigration
quelle
Sie müssen das Core Data-Modell mithilfe der Migration migrieren. Jedes Mal, wenn Sie das Modell ändern, machen Sie es ohne Versionierung inkompatibel. Schnall dich an, es ist ein haariges Thema.
http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html
quelle
Wenn Sie Änderungen an Ihrem Core Data-Modell vornehmen, müssen Sie eine Migrationsrichtlinie bereitstellen, die Core Data mitteilt, wie vorhandene persistente Objekte (die Ihre Benutzer mit der aktuell veröffentlichten Version erstellt haben) in das neue Modell übernommen werden.
In einigen Szenarien kann Core Data die Zuordnung vom alten zum neuen Modell automatisch ableiten. Für komplexere Änderungen müssen Sie möglicherweise eine Logik implementieren, die die Migration durchführt.
Details finden Sie im Programmierhandbuch für die Versionierung und Datenmigration von Kerndatenmodellen .
Update
Diese Antwort hier auf Stack Overflow behandelt die Grundlagen der einfachen Migration von Core Data und enthält auch Code, mit dem Sie beginnen können.
quelle
Dieses Problem tritt im Allgemeinen aufgrund einer Inkompatibilität zwischen der Version auf, auf der die Datenbank erstellt wurde. Der allgemeine Ansatz für dieses Problem besteht darin, die App zu löschen und neu zu installieren . In Ihrem erwähnten Fall ist die Version von DB in Xcode 3.2 und 4.2 jedoch völlig anders. Verwenden Sie also besser dieselbe Version von Xcode für DB.
quelle
Erstens sollten nur Dateien im
xcdatamodeld
Bundle enthalten seinxcdatamodel
. Ihre Unterklassen sollten NICHT in der seinxcdatamodeld
. Bewegen Sie die da raus. Es besteht die Möglichkeit, dass sie den Compiler verwirren.Zweitens zeigt der Fehler an, dass Core Data Ihr Modell nicht finden kann. Haben Sie Daten erstellt und dann das Modell berührt? Wenn ja, befinden Sie sich in einem inkonsistenten Zustand und müssen dies beheben, indem Sie entweder die Daten löschen (was Philippe vorgeschlagen hat) oder indem Sie Ihre Änderungen am Modell zurücksetzen .
quelle
xcdatamodel
Datei handelt, sollte sich dort befinden. Es sind die .h- und .m-Dateien, die verschoben werden müssen. Verwenden Sie den Finder.Ich habe den Fehler erhalten, aber der Grund, warum ich den Fehler erhalten habe, war der folgende.
Ich hatte ursprünglich eine Entität mit dem Namen "Eintrag" und eine Zeile für diese Entität in der Datenbank gespeichert. Ich habe dann eine weitere Entität mit dem Namen "Person" hinzugefügt und nach dem Hinzufügen wurde diese erstellt und der Fehler angezeigt. Also löste ich das Problem, indem ich die Entität "Person" löschte und dann die App erstellte, die Zeile in "Eintrag" löschte und dann die Anwendung schloss. Ich habe dann die App komplett von meinem Handy gelöscht und dann neu erstellt und es hat gut funktioniert. Sie sind sich nicht sicher, welcher Schritt das Problem behoben hat (das Löschen der Zeile oder der App), aber wenn Sie nach einer Lösung suchen, hilft dies hoffentlich. :) :)
Bearbeiten: Oh, und wenn Sie sich Sorgen gemacht haben, Ihre neue Entität (in meinem Fall "Person") zu löschen, um die App erneut zu erstellen, denken Sie daran, dass Sie sie anschließend mit CMD + Z zurückerhalten können!
quelle
Ich hatte dieses Problem - ich habe zuerst meinen Simulator zurückgesetzt und dann das Projekt bereinigt und neu erstellt. Und dann funktioniert es.
quelle
Wenn Sie Kerndaten ändern (Hinzufügen eines Felds zur Tabelle, Entfernen von Feldern usw.), muss die SQLite-Datei im Anwendungsdokumentordner mit Ihrem Schema synchronisiert sein.
Diese Datei wird standardmäßig nicht überschrieben, diese Datei muss neu generiert werden.
Folge diesen Schritten:
Wechseln Sie zu dem Ordner, auf den NSURL zeigt. (Dieser Pfad befindet sich in einer Ausnahmemeldung, die von der Anwendung vor dem Absturz generiert wurde.) Beispiel: / Benutzer // Bibliothek / Anwendungsunterstützung / iPhone Simulator // Anwendungen // Dokumente
Entfernen oder benennen Sie die SQLite-Datei um
Dadurch wird sichergestellt, dass das Schema und der Xcode synchron sind.
quelle
Für die Entwicklung von Mac-Apps:
Es hat bei mir funktioniert, hoffe das könnte hilfreich sein.
quelle
iOS Simulator -> Inhalt und Einstellungen zurücksetzen ...
Hat für mich gearbeitet
iOS Simulator -> Inhalt und Einstellungen zurücksetzen ... -> Zurücksetzen Funktioniert auch unter iOS9 (xcode 7.1)
quelle