2

v0.102.0のレルムのドキュメントによると、これは逆の関係を作成する方法です。

class Person: Object {
    // ... other property declarations
    let dogs = List<Dog>()
}

犬 (v1)

class Dog: Object {
    // ... other property declarations
    let owners = LinkingObjects(fromType: Person.self, property: "dogs")
}

という別のクラスがあり、 のどのインスタンスが のそのインスタンスを食べる を持っているかを追跡DogFoodする という逆の関係を作成したいとします。次のことを試すことができます。buyersPersonDogDogFood

犬 (v2)

class Dog: Object {
    // ... other property declarations
    let favoriteFoods = List<DogFood>
    let owners = LinkingObjects(fromType: Person.self, property: "dogs")
}

ドッグフード

class DogFood: Object {
    // ... other property declarations
    let buyers = LinkingObjects(fromType: Person.self, property: "dogs.favoriteFoods")
}

ただし、これにより次のエラーがスローされます。Property 'dogs.favoriteFoods' declared as origin of linking objects property 'buyers' does not exist.

同じ効果を達成する別の方法はありますか?

4

1 に答える 1

2

これはフィルタを使用して実現できますが、DogFoodクエリを実行する必要があるオブジェクトは の一部である必要があることに注意してRealmください。

コードは次のようになります。

class DogFood: Object {
    // ... other property declarations
    var items: Results<Person> {
        if let realm = self.realm {
            return realm.objects(Person).filter(NSPredicate(format: "ANY dogs.favoriteFoods.id == %@", self.id))
        } else {
            return RealmSwift.List<Person>().filter("1 != 1")
        }
    }
}

プロパティrealmは型Realm?であり、 からの継承によって全体像に組み込まれObjectます。特定のインスタンスが存在する領域を指し、割り当てられていない場合はObject戻ります。nilその場合は、プロパティitemsが の空のセットを返すように強制しますResults<Person>

于 2016-05-12T20:15:49.787 に答える