领域对象与收集通知

时间:2018-03-10 17:24:10

标签: swift realm

问题:当对象的List属性发生更改时,是否向对象添加观察者会触发通知?它似乎不会出现。

但是,如果将观察者添加到集合中的对象(通过过滤器),则如果该对象的List属性中的对象发生更改,则会触发通知。

我为什么要问:在这个用例中,我知道我想要观察的特定人,并且需要了解那些人(而不是其他人)的变化狗 - 特别是如果狗的位置变化

代码

class PersonClass: Object {
    @objc dynamic var person_id = NSUUID().uuidString
    let dogs = List<DogClass>()
    override static func primaryKey() -> String? {
        return "person_id"
    }
}

class DogClass: Object {
    @objc dynamic var dog_id = NSUUID().uuidString
    @objc dynamic var location = ""
    let person = LinkingObjects(fromType: PersonClass.self, property: "dogs")
    override static func primaryKey() -> String? {
        return "dog_id"
    }
}

在第一种情况下,我们将一个观察者添加到特定的人(令牌被定义为NotificationToken的类var?)

let person = realm.object(ofType: PersonClass.self,
                                  forPrimaryKey: self.personId)
self.token = person.observe { change in
   print("person object change notification")
}

然后,如果我们修改狗的位置,我们就不会收到通知。

在第二种情况下,通过过滤器检索person(结果集合),然后通过CollectionChange通知添加观察者

let personResults = realm.objects(PersonClass.self)
                         .filter("person_id == %@", self.personId)
self.token = personResults.observe { (changes: RealmCollectionChange) in
    print("collection change notification)
}

然后,如果狗的位置发生变化,我们会收到通知。

其他信息:我的实施可能不正确,所以有没有办法观察一个对象(person.observe)哪里有对它的狗列表的更改也会生成通知?

使用集合观察者是唯一的选择吗?

0 个答案:

没有答案