2016-03-22 11 views
1

レルムデモデータベースには、逆接続のサンプルオブジェクトがあります。オブジェクト参照にはRealmTestClass1へのリンクがあります。レルム逆接続の適切なコードは何ですか?

class RealmTestClass1: Object { 
    dynamic var integerValue = 0 
    let arrayReference = List<RealmTestClass0>() 
} 

class RealmTestClass2: Object { 
    dynamic var boolValue = false 
    dynamic var objectReference: RealmTestClass1? 
} 

同じ構造を再作成するにはどうすればよいですか?親オブジェクトのプロパティと同じリンクを作成するためにobjectReferenceプロパティに必要なコードは何ですか?レルムで

答えて

0

リンクは単方向です。したがって、多対多のプロパティPerson.dogsがDogインスタンスにリンクし、1対1のプロパティDog.ownerがPersonにリンクする場合、これらのリンクは互いに独立しています。 PersonインスタンスのdogsプロパティにDogを追加すると、自動的にこのPersonにdogのownerプロパティが設定されることはありません。リレーションシップのペアを手動で同期させるとエラーが発生しやすく、複雑で情報が重複するため、RealmはAPIを公開して、後述のバックリンクを取得します。逆の関係で

、あなたは、特定のプロパティを介して指定されたオブジェクトをリンクするすべてのオブジェクトを取得することができます。たとえば、DogインスタンスでObject.linkingObjects(_:forProperty:)を呼び出すと、指定されたクラスを持つすべてのオブジェクトが、指定されたプロパティを持つ呼び出しインスタンスにリンクして戻されます。それは犬に読み取り専用(計算された)所有者のプロパティを定義することで、このパターンを簡略化することが可能です:

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") 
    } 
} 

これは私がお読みになることをお勧めRealm's docs on relationships、から取られました。

+0

返信いただきありがとうございます。私はレルム上のドキュメントを読んでいます。しかし時には読書がそれをより明確にしていない。あなたが引用したコードは、デモデータベースにあるように人へのリンクを含む新しい列を追加しません。 – alexey

+0

私は本当にあなたの質問を本当に理解していないと思います。 "同じ構造を再作成する方法は?"あなたが投稿したコードは、あなたが描写している構造を持っているようです。あなたが達成したいとはどのように違うのですか? "親オブジェクトプロパティと同じリンクを作成するために、objectReferenceプロパティにはどのようなコードが必要ですか?" 2つの別々のリンクプロパティは同じリンクを共有することはできません。つまり、「リンクは一方向です」ということです。 * one *リンクだけを設定したい場合、上記の私の答えで書かれているように 'linkingObjects(_:forProperty:)'を使うべきです。 – jpsim

+0

私の質問が十分に明確でない場合は申し訳ありません。もう一度試してみましょう。 [スクリーンショット](https://s13.postimg.org/5bkv8zunr/111.jpg)をご覧ください。私はRealmデモデータベースと同じリンク接続を達成しようとしています。 – alexey

関連する問題