Frage

Ich bin ein sehr ärgerlich Fehler mit Core Data auf Mac OS X 10.5 zu begegnen.

Alle Einheiten haben Klassen in meiner Anwendung, die die gleichen Namen teilen.

Bis zu diesem Punkt, ich habe getan, 5 Migrationen ohne Probleme.

Ich bin mit dem XML-Datenspeicher. Ich habe mit 13 Einheiten V5 meiner Datenmodell bekam, von denen 4 abstrakt sind. Es sieht aus wie das: alt text http://synapticmishap.co.uk/ObjectModel.jpg

Was ich tun

  1. Erstellen Sie eine neue Version meiner Daten Modell -. das ist V6

  2. Fügen Sie eine neue Entität (JGToolbarWindow) und stellen Sie die Eltern JGWindowBase.

  3. ein Mapping-Modell hinzugefügt, die aus geht V5 bis V6. Speichert es.

  4. Stellen Sie die aktuelle Version V6 sein.

  5. Erstellen und Debuggen.

Ich habe die automatische Migration eingeschaltet in dem persistenten Speicher Coordinator Optionen Dictionary.

Das Problem

  1. einen Fehler - „Multiple Validierung Fehler aufgetreten ist. "

  2. Ich habe einen Haltepunkt festgelegt und untersucht die Validierungsfehler. Es gibt eine lange Liste der Validierungsfehler - es scheint ein für jede Dateneingabe zu sein.

  3. Es scheint, dass es ALL Strippen ist die Beziehungen und da einer meiner Eigenschaften - Anwendung - wird auf erforderlich sein, dies gilt als Validierungsfehler.

  4. So scheint es, das Problem liegt bei der Migration Migration nicht in der Lage, die Beziehungen ... obwohl anscheinend hat sich nichts geändert, so weit wie Beziehungen gehen.

  5. Wenn ich mich in ~ / Library / Application Support / Name meiner app / Ich sehe eine XML Datenspeicher, die den gleichen Namen hat ist von .xml.new beigefügten Bei der Betrachtung diese Datei in einem Texteditor, den ganzen Beziehungen haben in der Tat gewesen abgezogen.

Was habe ich versucht,

  1. Erstellen eines neuen XML-Datenspeicher und eine Handvoll Gegenstände darin setzen, dann erneut versuchen. Ich bekomme das gleiche Fehler für jedes Element.

  2. Reinigung und Wiederaufbau.

  3. Sicherstellen, dass die alte .xml.new aus frühere Validierung wurde entfällt.

  4. Löschen der neuen Modellvariante und meine Handlungen zu wiederholen, um sicherzustellen, ich tat nicht Schraube etwas nach oben.

  5. Hinzufügen von Mapping-Einträge für die einzelnen die abstrakten Klassen, die sind standardmäßig ignoriert. Hinzugefügt Attribute und Beziehungen. Immer noch genau die gleichen Fehler.

  6. Versucht das Hinzufügen einer neuen Einheit, dass keine Klasse hat, nur basierend auf NSManagedObject die hat JGWindowBase als Elternteil. Nochmal, fehlgeschlagen.

Das einzige, was ich denken kann, die sich geändert hat, ist einige meiner inneren Logik in den Klassen des Modells zugrunde liegen. Aber das sind kleinere Änderungen und ich kann nicht verstehen, wie es in Ordnung war die Migration, und jetzt ist es nicht, wenn sie nichts geändert zu haben scheint.

Ich habe eine brandneue Migration von einem umbenannt neuesten Datenspeicher versucht und haben genau die gleichen Probleme. Das heißt, ich habe dieses Problem für jeder Datenmigration zur Arbeit zu lösen.

Fehler

Wenn ich einen Haltepunkt an der presentError Zeile unter

if (![persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType
                                                  configuration:nil 
                                                            URL:url 
                                                        options:options 
                                                          error:&error]){
          [[NSApplication sharedApplication] presentError:error];
}

und untersuchen den Fehler userinfo, erhalte ich viele Fehler wie folgt aus:

Error Domain=NSCocoaErrorDomain Code=1570 UserInfo=0x67ebfd0 "item is a required value."

po (NSArray *)0x67ebfd0

gibt:

NSLocalizedDescription = "item is a required value.";
NSValidationErrorKey = item;
NSValidationErrorObject = <NSManagedObject: 0x45d5830> (entity: JGLogEntry; id: 0x4baccb0 <x-coredata://B597E13E-BE74-402E-BF00-5E1D57898406/JGLogEntry/p13942> ; data: {
duration = nil;
item = nil;                   // <<< Here's the problem.
processBundleID = nil;
processID = nil;
processName = nil;
startTime = 2009-10-09 16:41:44 +0100;
stopTime = 2009-10-09 16:42:17 +0100;
windowDocumentPathOrURL = nil;
windowID = nil;
windowTitle = nil;

Alles sagt dies wirklich ich ist, dass es die Beziehung zum Objekt verbunden Löschungen, die eine erforderliche Eigenschaft ist, weshalb es mir sind Fehler Validierung dort zu erzählen. Es gibt auch eine ganze Menge für die Anwendung, die die andere erforderliche Eigenschaft ist.

Wie ich es sehe, ist das Problem nicht mit den Validierungsfehler als solche, es ist, dass es scheint nicht zu migrieren alle Beziehungen auf allen .

Ich ziehe meine Haare mit diesem. Ich würde wirklich, wirklich schätzen Hilfe. Und schließlich, ein Star Wars Zitat:

  

"Help me, Stack-Überlauf.Du bist mein   nur hoffen. "

War es hilfreich?

Lösung

Upgrade auf Snow Leopard

Snow Leopard scheint dieses Problem zu lösen - ich habe keine Probleme hat, mit Daten, die seit dem Upgrade migrieren.

Alternativ Ich nehme an, es weggegangen, weil ich auf die SQLite-Datenspeicher eingeschaltet, obwohl ich denke, es ist wahrscheinlich, dass Migrationen mit abstrakten Objekten ist ein bisschen auf Leopard gebrochen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top