observe
を.value
と呼んで、クエリ内のすべての子をロードしました。子供がクエリの一部になっていない(タイムスタンプが古すぎる)場合は、.value
イベントが発生し、子供のデータがアプリから削除されます。パフォーマンス上の理由から、observe
を.value
と呼ぶ代わりに、.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を監視すると、DataSnapshotの定義に基づいて、あなたの側でonMessageReceived()コールバックがトリガーされます。私はこれについて100%確信しています。 –