Core Data migration problem: "Persistent store migration failed, missing Quelle verwalteten Objekt-Modell."
Hintergrund
- Einen Kakao Non Core Data Document
Projekt mit zwei Verwaltete Objekt
Modelle. - Modell 1 bleibt das gleiche. Modell
2 wurde geändert, so dass ich migrieren möchten
die store. - Ich habe eine neue version
von Design - > Data-Model - > Hinzufügen-Modell
Version in Xcode. - Der Unterschied zwischen den Versionen ist eine einzige Beziehung, die verändert wurde, aus, um ein eins-zu-viele.
- Ich habe mir eine
änderungen am Modell gespeichert werden. - Habe ich eine neue Mapping-Modell, das
hat das alte Modell als Quelle und die neue
Modell als Ziel. - Ich habe sichergestellt
alle Mapping-Modelle und Daten-Modelle
und kompiliert werden und alle sind
kopiert die Ressource-Ordner von meiner
app-bundle. - Habe ich eingeschaltet auf Wanderungen durch
die übergabe in einem Wörterbuch mit dem
NSMigratePersistentStoresAutomaticallyOption
Schlüssel als[NSNumber
beim hinzufügen der
numberWithBool:YES]
Persistent Store. - Anstatt Zusammenführen
alle Modelle im bundle, die ich angegeben habe zwei
Modelle, die ich verwenden möchten (Modell 1 und die
neue version des Modell 2) und zusammengeführt
Sie mitmodelByMergingModels:
Das Problem
Egal was ich mache, zu migrieren, erhalte ich die Fehlermeldung:
"Persistent store migration failed,
fehlende Quelle verwalteten Objekt-Modell."
, Was ich Versucht habe
- Ich reinige nach jedem einzelnen aufzubauen.
- Ich habe versucht, verschiedene Kombinationen von
nur das Modell, das ich bin migrieren
in Ressourcen wird kompiliert, oder
beide. - Da die Fehlermeldung
bedeutet es nicht finden können, die Quelle
Modell für die eigene migration, die ich ausprobiert habe
mit jeder version des Modells, in
sowohl die Ressourcen-Ordner und
zusammengestellt. - Die ich gemacht habe, sicher bin ich nicht
machen eine wirklich grundlegende Fehler, die durch
Wechsel zurück auf die ursprüngliche
version von meine-Daten-Modell. Die app
läuft wunderbar. - Habe ich gelöscht Mapping
Modell und der neuen version des
Modell, gereinigt, dann die beiden Erstplazierten. - Ich habe versucht, einen anderen ändern
in der neuen Modell - löschen einer Entität
statt.
Ich bin mit meinem Latein am Ende.
Kann ich nicht helfen, aber denke, ich habe einen riesigen Fehler irgendwo, dass ich bin nicht zu sehen. Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zwei Möglichkeiten:
Schalten Core Data-debugging und Sie sollten in der Lage sein zu sehen, die hashes, die Core-Daten sucht, wenn er die migration. Vergleichen Sie diese hashes zu dem, was in Ihren speichern auf einer Festplatte, und sehen, ob Sie übereinstimmen. Ebenso das Debuggen sollte Sie sehen die hashes in der mapping-Modell, um Ihnen zu helfen übereinstimmen Sie alles.
Wenn es nur in Ihrer mapping-Modell, das falsch ausgerichtet ist, können Sie es sagen, "von Quelle aktualisieren" aus dem Menü Gestaltung in Xcode. Wenn Sie fehlt, sind die eigentlichen source-Modell für das speichern der Datei auf der Festplatte dann suchen Sie in Ihrem version control system, oder verwenden Sie eine automatische migration zu bekommen, dass die Datei zu migrieren, um das Modell, das Sie glauben, ist die Quelle.
Update 1
Den Speicherort für das ändern der Quell-und Ziel-Modelle bewegt hat, um den unteren Rand des editor-Fenster:
Scheint dies nicht Recht. Warum verschmelzen die Modelle? Sie verwenden möchten Modell 2, die Migration Ihrer Filiale von Modell 1.
Aus der NSManagedObjectModel Klasse Referenz
Brauchen Sie nicht, etwas besonderes zu tun/spezifische mit Ihren source-Modell (Modell 1).. nur so lange, wie es in Ihr Bündel, das die leichtgewichtige migration-Prozess entdecken und nutzen.
Ich würde vorschlagen, die Abkehr von der mapping-Modell, das Sie erstellt in Xcode habe ich gesehen, schrecklich Leistung im Vergleich mit dem automatic-leichte Wanderungen. Ihre Laufleistung kann variieren, meine änderungen zwischen den Modellen sind anders als deine, aber ich würde nicht überrascht sein. Versuchen Sie, einige timing-mit und ohne Ihre eigenen mapping-Modell im bundle.
Können Sie überprüfen, in Ihrem code, dass Sie Ihre source-Modell verfügbar ist, indem Sie versuchen, es zu laden, und überprüfen Sie, dass es nicht null:
Diese übernimmt in Ihr Projekt Sie haben eine Ressource "YourModelName.xcdatamodeld" und "YourModelName.xcdatamodel" innerhalb der it.
Können, können Sie auch überprüfen, ob das Modell kompatibel mit Ihrem bestehenden, vor der migration persistent store:
Code wird davon ausgegangen, dass Sie haben eine Methode
-storeURL
angeben, wo der permanente Speicher geladen wird.Während Sie versuchen, ein upgrade einer vorhandenen app ' s Core Data-Modell (und Migration von legacy-Daten), ich rannte über ein Szenario, in dem ein third-party-Framework schreiben der Daten in die app-Datenbank. Ich wurde immer diese Fehlermeldung, "Kann nicht finden Modell für die Datenquelle speichern." Weil der Dritte Modell wurde nicht geladen, wenn ich versuchte, die migration, die migration war ein Fehlschlag.
Schrieb ich diese Methode (unten) während der Behandlung dieses Problems. Es kann nützlich sein, für diejenigen, die vor dieser Art von Problemen.
Diesem code-snippet wird, erhalten Sie ein speichern der Metadaten.
Die VersionInfo.plist (gespeichert in der kompilierten app bundle) enthält die hashes, die im Zusammenhang mit den verschiedenen Entitäten in Ihre Modelle (base64-Codierung). Ebenso eine BLOB-Spalte in den datenspeicher (Z_METADATA.Z_PLIST) enthält eine Binär codierte Eigenschaft Liste mit den Hashwerten (auch base64-kodiert) für jede Entität, die im Zusammenhang mit den Daten.
Den -entitiesByName Methode auf NSManagedObjectModel ist nützlich für dumping die Entitäten und hashes, existieren innerhalb eines bestimmten Modells.
Ich hatte ein ähnliches problem. Ich habe verwendet
+modelByMergeingModels:
, aber ich habe nicht mit Mapping-Modell. Jedoch bei der Zusammenlegung der Modelle funktioniert nicht mit leichte migration von Daten.Aus der Apple-Docs:
Wenn Sie
+modelByMergeingModels:
als die, die verwendet wird, für das Ziel-Modell. Allerdings die Core-Daten werden nicht in der Lage zu finden-source-Modell. Quelle Modell wurde erstellt mit+modelByMergeingModels:
in der älteren version der Anwendung und die wichtigsten Daten versuchen zu verschmelzen Modelle, um herauszufinden, die Quelle Modell.Was ich am Ende tun, ist, dass ich (manuell) erstellt einen neuen zusammengeführten
.xcdatamodeld
durch Bearbeiten der XML-Dateien der Modelle, fügte es in das Projekt, wurde die separate.xcdatamodeld
s aus den Quellen Kompilieren und anstatt+modelByMergeingModels:
verwendenNSManagedObjectModel
's-initWithContentsOfURL:
mit der URL des neuen zusammengeführten Modell. Ich werde wohl ein script erstellen, der automatisch Zusammenführen der Modelle in der Zukunft.Als ich diesen Fehler hatte ich aktualisierte mein core data Modelle, aber nicht gelöscht die app-Instanz von meinem Telefon testen. Das bedeutete, die Modelle gespeichert zu zentralen Daten auf dem Handy nicht mit dem übereinstimmen, was ich zu verwenden versucht in den code.
Ich entfernte die app aus dem Telefon-und re-built/lief erfolgreich.