我遇到了一个问题:除了最新的Couchbase移动解决方案之外,我还使用Xcode和Swift。如果我使用String"行" LiveQuery也可以很好地工作。为了注册Observer然后听它。但我在我的应用程序中有一个视图,我需要两个livequerys。所以我打算用两个不同的关键路径制作两个实时查询,例如第一个" getTopicComments",第二个" getTopicDetails",所以我可以在它们之间进行区分,如下所示。但正如我所说,它只适用于关键路径"行"。我误会了吗?因为我完全不理解为什么它不能与另一个String一起工作。在我看来,正如我在couchbase的文档中所读到的那样,在注册实时查询时我使用的字符串不应该是相关的。
liveQueryOne.addObserver(self, forKeyPath: "getTopicComments", options: .new, context: nil)
liveQueryTwo.addObserver(self, forKeyPath: "getTopicDetails", options: .new, context: nil)
和
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if (keyPath == "getTopicComments") {
} else if (keyPath == "getTopicDetails") {
}
}
答案 0 :(得分:0)
“rows”是CBLLiveQuery上的KVO可观察属性。这就是为什么你可以添加观察者并查找KVO通知的原因。实时查询背后的想法是可以自动通知应用程序数据库的更改,这些更改会影响查询结果。数据库更新时将更新“rows”属性,这就是您观察此属性以了解更改的原因。您在上面添加的keyPaths在CBLLiveQuery中不存在,因此您不会看到任何通知。