Einzelne inverse Beziehung in Realm-Modellen

9

Ich entwickle eine einfache iOS-App, um Swift zu lernen und ich benutze Realm. Soweit ich weiß, werden in Realm inverse Beziehungen mit einer LinkingObjects -Eigenschaft erreicht, bei der es sich um eine Sammlung handelt, die alle Objekte enthält, die mit dieser verknüpft sind.

Betrachten Sie dieses Beispiel aus der Realm-Dokumentation:

%Vor%

In meinem Modell weiß ich, dass jede Dog Instanz nur einen Besitzer hat, da jeder Hund, wenn er erstellt wird, nur zu einem Person hinzugefügt wird List .

Jetzt hätte ich gerne eine owner: Person -Eigenschaft in der Dog -Klasse, die auf ihren einzigen Besitzer verweist, um den Code intuitiver und einfacher zu machen (anstatt jedes Mal dog.owners.first schreiben zu müssen), während der lazy-loading Verhalten (sie sind faul geladen, oder?). Ich weiß nicht, wie teuer es ist, die "Verknüpfungsobjekte" abzufragen, aber da es viele "Hunde" gibt, denke ich, dass es besser wäre, auf sie bei der Objektinitialisierung nicht zuzugreifen.

Für jetzt sind das die Lösungen, an die ich denken könnte:

1:

%Vor%

2a:

%Vor%

2b:

%Vor%

3:

%Vor%

Ich glaube nicht, dass "solution 1 " lazy geladen ist und wie in "solution 2 " wird owner nicht automatisch aktualisiert "Dies sollte jedoch kein Problem sein, da in meinem Fall ein Dog den Besitzer niemals ändern wird.

Was würden Sie empfehlen, eine einzelne umgekehrte Beziehung in Swift zu haben?

    
Lorenzo Rossi 10.06.2016, 18:37
quelle

2 Antworten

9

Der einzige Weg ist 3 . Weder 1 noch 2a, 2b funktionieren nicht.

Weil zur Zeit LinkingObjects nur verwendet werden kann, um eine Eigenschaft vom Typ LinkingObjects zu initialisieren. Realm liest Klassendefinitionen und alle Eigenschaften beim Initialisieren, um ein Datenschema zu definieren. Im Code von 1 wird die Eigenschaft owner nur als Person Eigenschaft behandelt.

2a und 2b funktionieren auch nicht. Weil Realm lazy -Eigenschaften nicht unterstützt. Auch 2b verwendet LinkingObjects auf die falsche Weise wie 1 .

Also funktioniert nur 3 wie erwartet.

Siehe auch ... Ссылка

    
kishikawa katsumi 10.06.2016, 22:57
quelle
0

Vielleicht können Sie die tatsächliche Beziehung auf der "einen" Seite festlegen?

  • Geben Sie die Verbindung auf der 'one'-Seite
  • an
  • Führe eine Abfrage im Getter auf der 'many'-Seite durch:

Also sollte es so lesen:

%Vor%     
Kevin R 03.05.2017 11:30
quelle

Tags und Links