我编写了这样的代码来监听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'改变了。我该怎么办?可能吗?
答案 0 :(得分:1)
您至少有两个选择。
如果您没有多个Post
个对象,则可能需要考虑在每个对象上注册object notifications。对象通知告诉您哪些属性已更改以及如何更改,因此您可以使用该信息重新加载表视图。但是,您需要在每个Post
对象上注册一个单独的通知,如果您有大量这些通知,这可能不实用。
这是另一个想法。将ignored布尔属性添加到名为Post
的{{1}},并添加一个Swift isLikeWasChanged
块,随时将didSet
设置为isLikeWasChanged
你修改true
。然后,在现有的集合观察块中,仅当至少有一个isLikeByMyself
为isLikeWasChanged
时才重新加载表格视图,记住在离开块之前将它们全部设置回true
。