Lange Rede kurzer Sinn, mein Kerndatenschema wurde geändert und meine App wurde an den App Store übermittelt, was dazu führte, dass alle, die ihre App aktualisiert haben, abstürzen. Der Absturz wird durch eine fehlende NSPersistentStore
verursacht, da das Datenmodell nicht korrekt migriert wird.Ich habe NSPersistentStore in der neuen Version nicht migriert, kann ich mit einem App-Update wiederherstellen?
Ich sehe immer noch die .SQLite und zugehörige Datenbank-Dateien im Verzeichnis Dokumente, und wenn ich auf die ältere Version downgrade, funktioniert alles mit allen Daten. Meine Frage ist, kann ich das mit einem App-Update wiederherstellen, indem ich das vorhandene irgendwie migriere und es dem NSPersistentStoreCoordinator hinzufüge?
EDIT: also änderte ich eigentlich nicht mein xcdatamodel selbst, daher "lange Geschichte kurz". Allerdings habe ich XMPPFramework aus meinem Projekt entfernt und ich habe das Gefühl, dass dies das Kerndatenproblem verursacht haben könnte.
EDIT:
Ich habe keine Änderungen direkt an meinem Datenmodell vorgenommen, aber ich habe das Problem festgestellt. Ich habe meine NSManagedObjectModel
unter Verwendung [NSManagedObjectModel mergedModelFromBundles:nil]
abgerufen, die ALLE Datenmodelle zusammenführt, die im Bündel vorhanden sind. Dies beinhaltete alle Datenmodelle, die mit dem XMPPFramework ausgeliefert wurden, und jetzt, da das Framework entfernt wurde, ist das NSManagedObjectModel, das an [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel]
übergeben wird, anders, was den Absturz verursacht.
Ich löste das Problem, indem FMDB verwendet, um den Inhalt der vorhandenen Datenbank abzurufen, erstellte dann eine neue SQLite-Datei und zeigte den persistenten Speicherkoordinator auf diese neue SQLite-Datei. Dann habe ich einfach alle vorhandenen Daten in die neue Datenbank eingefügt, indem ich die vorhandenen Daten durchlaufen und die entsprechenden s erstellt habe. Ich habe auch aufgehört, mergedModelFromBundles
zu verwenden, um mein Datenmodell abzurufen, und stattdessen initWithContentsOfURL
zu verwenden.
Wenn Sie das Modell nicht geändert haben, was führt Sie zu dem Schluss, dass der Absturz durch nicht migrierte Daten verursacht wird? Die Migration ist nicht notwendig, es sei denn, das Modell hat sich geändert. –
Der Fehler hat mit einem "fehlenden persistenten Speicher" in meinem NSManagedObjectModel zu tun. Dies ist immer (?) Aufgrund einer Änderung im Datenmodell. In meiner App befindet sich ein unordentlicher Code, der einige NSManagedObject-Eigenschaften im Code bearbeitet, sodass das gesamte Schema nicht im xcdatamodel definiert ist, was ebenfalls ein Problem verursachen kann. – quark
Ich denke, das Problem ist, dass es schwer zu verstehen ist, was sich tatsächlich geändert hat. Sie scheinen zu sagen, dass sich das Modell geändert hat, aber auch, dass es sich nicht geändert hat. Was genau ist mit dem Modell passiert? –