Links in Realm sind unidirektional. Wenn also eine to-many-Eigenschaft von Person.dogs mit einer Dog-Instanz verknüpft ist und eine to-one-Eigenschaft von Dog.owner mit Person verknüpft ist, sind diese Links unabhängig voneinander. Durch das Anhängen eines Hundes an das Hundeeigentum einer Personeninstanz wird die Eigentümereigenschaft des Hundes nicht automatisch auf diese Person festgelegt. Da das manuelle Synchronisieren von Beziehungspaaren fehleranfällige, komplexe und duplizierte Informationen ist, macht Realm eine API verfügbar, um die unten beschriebenen Backlinks abzurufen.
Mit inversen Beziehungen können Sie alle Objekte erhalten, die mit einem bestimmten Objekt über eine bestimmte Eigenschaft verknüpft sind. Wenn Sie beispielsweise Object.linkingObjects(_:forProperty:)
für eine Dog-Instanz aufrufen, werden alle Objekte der angegebenen Klasse zurückgegeben, die mit der angegebenen Eigenschaft eine Verbindung zur aufrufenden Instanz herstellen. Es ist möglich, dieses Muster zu vereinfachen, indem ein read-only (berechnete) Besitzer Eigenschaft auf Hunde definieren:
class Person: Object {
// ... other property declarations
let dogs = List<Dog>()
}
class Dog: Object {
dynamic var name = ""
dynamic var age = 0
var owners: [Person] {
// Realm doesn't persist this property because it only has a getter defined
// Define "owners" as the inverse relationship to Person.dogs
return linkingObjects(Person.self, forProperty: "dogs")
}
}
Dieses von Realm's docs on relationships genommen wurde, die ich Sie ermutigen, zu lesen.
Vielen Dank für die Antwort. Ich lese die Dokumente über Realm. Manchmal macht das Lesen es jedoch nicht klarer. Der von Ihnen zitierte Code fügt keine neue Spalte mit dem Link zur Person hinzu, wie es in der Demo-Datenbank der Fall ist. – alexey
Ich nehme an, ich verstehe deine Frage nicht wirklich. "Wie erstelle ich dieselbe Struktur?" Der Code, den du gepostet hast, scheint die Struktur zu haben, die du beschreibst, oder? Wie unterscheidet es sich von dem, was Sie erreichen möchten? "Welcher Code wird für die objectReference-Eigenschaft benötigt, um dieselbe Verknüpfung zur übergeordneten Objekteigenschaft zu erstellen?" Zwei separate Link-Eigenschaften können nicht den gleichen Link teilen, das meine ich mit "Links sind unidirektional". Wenn Sie nur einen * Link setzen möchten, sollten Sie 'linkingObjects (_: forProperty:)' verwenden, wie in meiner obigen Antwort geschrieben. – jpsim
Es tut mir leid, wenn meine Frage nicht klar genug war. Lass mich noch einmal versuchen. siehe [Screenshot] (https://s13.postimg.org/5bkv8zunr111.jpg). Ich versuche, die gleiche Verbindung Verbindung zu erreichen, wie es in Realm Demo-Datenbank. – alexey