iOS Realm检测RLMObject的更改

时间:2017-11-21 15:21:54

标签: ios realm

我编写了这样的代码来监听Post对象中的更改。

    notification = Post.allObjects(in: RLMRealm.encryptedRealm()! as! RLMRealm).addNotificationBlock({ (results, changes, error) in
        let pred = NSPredicate(format:  "tag == %@", self.postTag)
        self.posts = CommonResult.objects(with: pred).sortedResults(usingKeyPath: "id", ascending: true)

        if let _ = changes {
            if (changes!.insertions.count > 0 || changes!.deletions.count > 0 || changes!.modifications.count > 0) {
                    self.tblListing.reloadData()
            }
        }
    })

在我的Post对象中,有2个属性。一个是' rowHeight'而另一个是“我喜欢自己”。

我想重新加载tableview只有在' isLikeByMyself'改变了。我该怎么办?可能吗?

1 个答案:

答案 0 :(得分:1)

您至少有两个选择。

如果您没有多个Post个对象,则可能需要考虑在每个对象上注册object notifications。对象通知告诉您哪些属性已更改以及如何更改,因此您可以使用该信息重新加载表视图。但是,您需要在每个Post对象上注册一个单独的通知,如果您有大量这些通知,这可能不实用。

这是另一个想法。将ignored布尔属性添加到名为Post的{​​{1}},并添加一个Swift isLikeWasChanged块,随时将didSet设置为isLikeWasChanged你修改true。然后,在现有的集合观察块中,仅当至少有一个isLikeByMyselfisLikeWasChanged时才重新加载表格视图,记住在离开块之前将它们全部设置回true