2010-12-04 2 views
0

Nehmen wir an, ich habe eine Tabelle namens "Event", die eine to-many Beziehung mit der Tabelle "Group" hat, die eine to-many Beziehung mit der Tabelle "Person" hat.Wie kann ich eine CoreData-Tabelle pflegen, die außerhalb ihrer Beziehung zu einer anderen Tabelle bearbeitet werden kann?

Viele Gruppen können erstellt werden, die dieselbe Person referenzieren können.

Ich habe noch keine inverse Beziehung von "Person" zu "Gruppe" hinzugefügt, da wenn eine "Gruppe" gelöscht wird, möchte ich nicht die zugehörige "Person" löschen, da sie woanders referenziert werden kann.

Sollte ich die umgekehrte Beziehung einfach weglassen? Die Ärzte raten dringend davon ab, aber ich denke, dass dies ein Fall ist, in dem es der richtige Weg ist.

Jede Hilfe wird geschätzt.

+0

Soll die Löschregel für Group auch auf "No Action" gesetzt werden? Auf diese Weise wird die Tabelle "Person" nicht geändert, wenn eine Gruppe gelöscht wird. – Christopher

+0

Ich denke, ich kann es jetzt haben ... Gruppe hat zu-viele Beziehung mit Person. Person hat eine inverse to-many-Beziehung zur Gruppe. Jetzt muss ich Löschregeln festlegen. Ich habe Gruppen-Person als "Keine Aktion" und Person-Gruppe als "Ablehnen". Ich denke, vielleicht sollte Group-Person "Nullify" sein und CoreData ist klug genug, "Player" in Ruhe zu lassen, wenn es von einer anderen Gruppe referenziert wird? Ich denke, das ist die Kernfrage, die ich stelle :-) Danke ... – Christopher

+1

Christopher, normalerweise wollen Sie den Standardwert von "Nullify". "No Action" ist vorgesehen, wenn Sie benutzerdefiniertes Verhalten in Code implementieren möchten. –

Antwort

2

Sofern Sie keinen sehr guten Grund haben, etwas anderes zu tun, sollten Sie immer eine inverse Beziehung haben. Es hilft CoreData, die Integrität des Objektgraphen beizubehalten. Die Standardregel zum Löschen einer Beziehung ist "Nullifizieren", was wie gewünscht klingt. "Nullsetzen" bedeutet, dass beim Löschen dieses Objekts das Beziehungsattribut am anderen Ende dieser Beziehung (für eine direkte Beziehung) oder für eine Zu-Viele-Beziehung aus der Menge entfernt wird. Die einzige Möglichkeit, das andere Ende der Beziehung tatsächlich zu löschen, ist, wenn Sie die Löschregel ändern, um dies zu spezifizieren.

tl; dr: Verwenden Sie inverse Beziehungen, lassen Sie die Delete Rule auf den Standardwert von "Nullify".

Verwandte Themen