2012-03-27 19 views
4

Ich habe eine bestehende iPad-Anwendung, zu der ich gerade Core-Daten-Versionierung hinzugefügt habe. Ich habe die Dokumentation durchgesehen und die detaillierten Schritte ausgeführt. Jetzt nach meinem neuen Modell als das aktuelle versioniert Modell auswählen und versuchen, es auf meinem dev Gerät von xCode zu laufen bekomme ich folgende Fehlermeldung:Core Data Migration - Tabelle existiert bereits

2012-03-28 07:35:42.137 DocsOnTap[2603:707] CoreData: error: (1) I/O error for database at /var/mobile/Applications/06EECF01-3598-4513-8A3A-BE4FD49EEBF6/Documents/.DocsOnTap.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3. SQLite error code:1, 'table Z_2TAG already exists'

Die einzige Änderung, die ich zu meinem Modell machte, war in einem einzigen hinzufügen neue Einheit Ich habe eine Tabelle namens Tag in meinem Modell - das scheint der Fehler zu sein.

Wenn ich mein aktuelles versioniertes Modell auf die vorherige Modellversion zurücksetze, kann ich meine App auf meinem Dev-Gerät ohne Fehler von Xcode ausführen.

Ich habe gelesen, dass es Probleme geben kann, Core-Datenmigration auf Dev-Geräten zu verwenden. Ich möchte jedoch nur den Prozess testen, um sicherzustellen, dass die Migration bei der Aktualisierung unserer App im Appstore wie erwartet für unsere Kunden funktioniert.

+0

Sie müssen Ihre ursprüngliche App jedes Mal mit dem Originalmodell installieren, wenn Sie die Migration testen möchten. Wenn Sie Änderungen an der neuen Version in Dev vornehmen, müssen Sie die App löschen und neu installieren (es sei denn, Ihr Versionsdevice ändert sich). – Joe

+0

Ich bin mir nicht sicher, ob ich dich verstehe. Ich habe meine Original-App mit Original-Modell auf meinem Dev-Gerät. Ich habe meine bestehende App geändert, um die Kerndaten-Versionierung hinzuzufügen, ein neues Modell hinzugefügt, das aktuelle Modell erstellt und dem neuen Modell eine Entität hinzugefügt. Dann habe ich versucht auf dem Dev-Gerät zu laufen und habe den obigen Fehler bekommen. Was meinst du mit "Versionsänderungen"? – daveywc

+0

Ich sagte, dass wenn Sie das Datamodell (Version 2.0 zum Beispiel) versionieren, und fügen Sie dann eine Tabelle hinzu. Wenn Sie den Code das erste Mal über dem Datenmodell der Version 1 ausführen, wird er automatisch migriert, sofern Sie den Code hinzugefügt haben. Wenn Sie jetzt Ihren Code stoppen und weitere Änderungen am 2.0-Datenmodell vornehmen, wird die automatische Migration nicht durchgeführt, da Sie das gleiche Modell geändert haben und Ihre Anwendung wahrscheinlich entfernen und erneut ausführen müssen. – Joe

Antwort

4

Nun, das war ein obskurer Fehler. Die Entität, die ich hinzufügte, hieß AppKeys - dies muss der Name einer Entität sein, die intern von Core Data oder SQL Lite verwendet wird. Ich ging zurück zu Scratch und fand heraus, dass ich andere Attribute und Entitäten problemlos hinzufügen und migrieren konnte. Wenn ich jedoch noch einmal versuchte, meine Entität namens AppKeys hinzuzufügen, bekam ich den gleichen Fehler, der besagt, dass 'Tabelle Z_2TAG bereits existiert'. Die Lösung für mein Problem besteht also darin, einen anderen Entitätsnamen zu wählen. Es ist schade, dass dies nicht irgendwo offensichtlich dokumentiert ist - oder dass der Fehler nicht hilfreicher war. Wie auch immer, hoffentlich hilft das einem anderen nur eines Tages.

+0

Ich habe den gleichen Fehler, SQLite-Fehlercode: 1, SQLite Fehlercode: 1, 'Tabelle ZMEASUREMENT bereits existiert', und das Umbenennen der Tabelle hat es für eine Revision behoben. Das nächste Mal, als ich versuchte, zu migrieren, bekam ich denselben Fehler für den neuen Namen, 'Tabelle ZMEASUREMENT2 existiert bereits'. –

+0

danke @daveywc. Es ist erbärmlich, wie wundervolle Dinge dich manchmal wundern. kann NSEntityMigrationPolicy eine Lösung für Attribute und Beziehung sein (das ist, was ich von ihrer Definition finde) auch: http://stackoverflow.com/questions/7027108/core-data-versioning-and-migrating-with-custom-policy – khunshan

+0

Ich hatte ein ähnliches Problem, bei dem eine Beziehung "Gruppen" genannt wurde und dies anscheinend ein reservierter Name in iOS 7 ist, aber nicht 8. Das Umbenennen der Beziehung zu etwas anderem löste das Problem. – nrj

8

In meinem Fall der gleiche Fehler aufgetreten aufgrund Umbenennung ID der im Datenmodell Inspektoren für das Entity gesetzt wurde. Nachdem ich die umbenennen ID das Problem entfernt hatte.

+3

Ich tat das gleiche, beim Einfügen der Umbenennung Id ich irrtümlich die Umbenennung Id für Entität anstelle von Attribut. –

+0

@VickyDhas Thx! Ich habe auch den gleichen Fehler gemacht! Ich habe mein git diff 5 mal übersehen, bis ich deinen Kommentar gelesen habe! * facepalm * – Buju

Verwandte Themen