Realm反向连接的正确代码是什么?

时间:2016-03-22 21:08:25

标签: swift realm

Realm演示数据库具有反向连接的示例对象:objectReference具有指向RealmTestClass1的链接。

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

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

如何重新创建相同的结构? objectReference属性需要什么代码才能创建与父对象属性相同的链接?

1 个答案:

答案 0 :(得分:0)

Realm中的链接是单向。因此,如果一个to-many属性Person.dogs链接到Dog实例并且一个属性Dog.owner链接到Person,则这些链接彼此独立。将Dog附加到Person实例的dogs属性,不会自动将dog的所有者属性设置为此Person。因为手动同步关系对是容易出错,复杂和重复的信息,所以Realm公开了一个API来检索下面描述的反向链接。

使用反向关系,您可以通过特定属性获取链接到给定对象的所有对象。例如,在Dog实例上调用Object.linkingObjects(_:forProperty:)将返回指定类的所有对象,这些对象链接到具有指定属性的调用实例。通过在Dog:

上定义只读(计算)所有者属性,可以简化此模式
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,我建议您阅读。