0
我曾经打电话observe
与.value
这会加载查询中的所有子项。实时,当一个孩子不再是查询的一部分时(即其时间戳太旧),该事件将被解雇,并且孩子的数据将从我的应用程序中删除。为了达到性能目的,我不单独使用.value
与observe
联系,而是分别观察.childAdded
,.childChanged
和.childRemoved
事件。但是,当孩子不再是查询的一部分时,这些事件都不会被触发,并且孩子的数据仍然保存在我的应用程序中。我试过观察.childMoved
,但那也没有被解雇。我该如何复制观察.value
的这一方面?下面是代表我的一些代码:Firebase删除不再是查询的一部分的子女
class ViewController: UIViewController {
var children_query: DatabaseQuery!
var current_time: TimeInterval {
return Date().timeIntervalSince1970
}
override func viewDidLoad() {
super.viewDidLoad()
self.children_query = Database.database().reference().child("children").queryOrdered(byChild: "timestamp").queryStarting(atValue: current_time)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// refresh query every time this view appears (this is the root view controller so it comes and goes)
self.children_query = Database.database().reference().child("children").queryOrdered(byChild: "timestamp").queryStarting(atValue: current_time)
self.children_query.observe(.childAdded, with: { snapshot in
print(snapshot.value)
})
self.children_query.observe(.childChanged, with: { snapshot in
print(snapshot.value)
})
self.children_query.observe(.childRemoved, with: { snapshot in
print(snapshot.value)
})
self.children_query.observe(.childMoved, with: { snapshot in
print(snapshot.value)
})
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
self.children_query.removeAllObservers()
}
}
我不确定我是否遵循 –
@ArchieGertsman,为确切证明,请在此页查看此视频。他谈到DataSnapshot。 https://firebase.google.com/docs/web/setup –
@ArchieGertsman,在那个rootNode里面的任何东西都被改变了,并且在rootNode上观察,然后根据DataSnapshot的定义,onMessageReceived()回调会在你身边触发。我对此100%肯定。 –