2016-10-13 4 views
0

Null ist Ich habe drei Modelle, ein Elternteil, Kind, Enkelkind. Ich konnte die Daten korrekt speichern und verknüpfen. Jetzt möchte ich in der Lage sein, die Kind- und Enkel-Objekte zu löschen, wenn ich den Eltern löschen.So löschen Sie ein Objekt auf der Grundlage einer bestimmten Eigenschaft, die

Der Elternteil hat eine Eigenschaft des Kindes und das Kind hat eine Eigenschaft des Enkelkindes.

Beispiel:

class Parent: Object { 
    dynamic var name = "" 
    var child = List<Child> 
} 

class Child: Object { 
    dynamic var name = "" 
    dynamic var parent: Parent? 
    var grandChild = List<GrandChild> 
} 

class GrandChild: Object { 
    dynamic var name = "" 
    dynamic var child: Child? 
} 

(Das ist nicht mein eigentlicher Code, also wenn ich auf etwas hier verkorksten bitte Fehler ignorieren.)

Was ich tun möchte, ist die übergeordnete löschen , was die Eigenschaft von 'Eltern' im Child-Objekt zu Null machen würde. Dann möchte ich das Kindobjekt löschen, wenn seine Elterneigenschaft Null ist. Dann mach das gleiche für das grandChild. Mit anderen Worten, eine kaskadierende Löschung von Objekten.

Also, so etwas wie:

, wenn die übergeordnete Eigenschaft des Objektes: Kind null ist, dann das Objekt löschen.

Dies scheint ein einfaches Problem zu lösen, aber ich kann nicht viele Beispiele von verschachtelten Datenmodellen aus Realm auf diesen Boards finden, oder ich stelle die Fragen nicht in der richtigen Weise, um sie zu finden.

+0

Ich habe gelesen, Unterstützung für Kaskadierung löscht # 1104. Ich suche nach einem Workaround, bis das Feature hinzugefügt wird. –

Antwort

0

Derzeit gibt es keine Unterstützung für kaskadierende Löschungen in Realm, daher müssen Sie untergeordnete Instanzen manuell entfernen. Sie können LinkingObjects verwenden, um alle untergeordneten Elemente zu entfernen, bevor Sie das übergeordnete Element löschen, oder einfach alle untergeordneten Instanzen abfragen, in denen parent == nil nach dem übergeordneten Element gelöscht wird, und sie löschen. Weitere mögliche Lösungen finden Sie hier: https://github.com/realm/realm-cocoa/issues/1186

+0

Ihre zweiten Vorschläge, das Objekt zu finden, wo der Elternteil null ist, ist was ich suche, ich kann einfach keine Beispiele von Code finden, die das tun würden. Ich kenne Prädikate nicht so gut wie ich sein sollte. Würden Sie bitte ein Codebeispiel angeben? –

+0

Ihre Lösung hat perfekt funktioniert. Es war meine Unerfahrenheit in der Arbeit mit Realm-Filterung, das war das Problem. Alles, was ich getan habe, war CountertopsToBeDeleted = realm.objects (Countertop.self) .filter ("room == nil") versuchen Sie es! realm.write { realm.delete (countertopsToBeDeleted) –

Verwandte Themen