2013-01-08 2 views
10

ich gefunden habe nichts über migration rules bei den deletion rule ein managedObjects relationship ÄndernCoredata Migration - löscht Regeln der Beziehungen

Meines ersten Coredata-Modells mit einer Beziehung eine Einheit enthalten ist. Die Löschregel dieser Beziehung war cascade. Ich musste dieses Verhalten zu Nullify ändern.

Daher habe ich eine new version of my coredata model erstellt, aber ohne leichte Migration und es funktioniert immer noch. So wüßte ich, wenn ich getan hätte, eine neue Version meines Modells hinzuzufügen oder wenn das Ändern der Löschungsregeln (z. B. von cascade zu nullify) keine Migration bewirkt/benötigt.

Irgendwelche Vorschläge?

+0

Keine leichte Migration? Sie verwenden also nicht "NSMigratePersistentStoresAutomaticallyOption" oder "NSInferMappingModelAutomaticallyOption", wenn Sie den persistenten Speicher hinzufügen? –

+0

Nein, ich bin mit dem folgenden zu meinem Speicher zu erstellen: Koordinator addPersistentStoreWithType: NSSQLiteStoreType Konfiguration: nil URL: storeURL Optionen: nil Fehler: & error] – Alexander

Antwort

16

Löschregeln geben das Verhalten von Core Data zur Laufzeit an: Wenn ein Objekt gelöscht wird, können andere Beziehungen auf NULL gesetzt werden, oder verwandte Objekte können ebenfalls gelöscht werden.

Daher nahm ich an, dass die Löschregeln nur im Core Data Model, aber nicht in der persistenten Speicherdatei gespeichert werden.

Um dies zu überprüfen, habe ich 2 Files aus 2 Core Data-Modellen mit identischen Entitäten, aber unterschiedlichen Löschregeln erstellt. Die NSStoreModelVersionHashes in den persistenten Speichern metadata Wörterbuch waren identisch.

In der Tat, beide SQLite-Dateien waren identisch mit der einzigen Ausnahme des „Z_UUID“ in der „Z_METADATA“ Tabelle, die die NSStoreUUID der persistenten Speicher-Datei.

Außerdem würde addPersistentStoreWithType:... fehlschlagen, wenn sich die Versionshashes des geladenen Speichers von den Hashwerten im Modell unterscheiden.

Das Ändern der Löschregeln sollte daher kein Problem darstellen.

+0

, dass genau das, was ich erlebt hat - identischen Hashes. Ich habe mich einfach wehleidig gemacht, weil ich in dem Apple-Dokument gefunden habe, dass die deleteRules relevant sein sollten: [...] Für jede Eigenschaft in jeder Entität müssen die folgenden Attribute gleich sein: name, isOptional, isTransient, isReadOnly, für Attribute attributeType und für die Beziehungen destinationEntity, minCount, maxCount, deleteRule und inverseRelationship [...]! Würdest du nicht auch eine neue Version für die Änderung erstellen? Ich sehe keinen Vorteil von einem neuen ... – Alexander

+0

@Alexander: Ich muss zugeben, dass ich die Dokumentation nicht nachgeschlagen habe (kannst du mir den Ort nennen?), Ich habe es gerade wie beschrieben getestet. Und du hast getestet, dass 'addPersistentStoreWithType:' funktioniert, also sehe ich kein Problem. –

+0

Hier gehen Sie (Seite 8 an der Unterseite): https://developer.apple.com/library/mac/documentation//Cocoa/Conceptual/CoreDataVersioning/CoreDataVersioning.pdf – Alexander