Pet*_*ies 5 firebase swift firebase-realtime-database
使用removeObserver(在Swift 3中使用withHandle,在viewDidDisappear上不删除Observer
var query = FIRDatabaseQuery()
var postRef: FIRDatabaseReference!
var postRefHandle: FIRDatabaseHandle?
override func viewDidLoad() {
super.viewDidLoad()
postRef = baseRef.child("Posts")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
if postRefHandle != nil {
//try 1:
//postRef.removeObserver(withHandle: postRefHandle!)
//try 2:
//postRef.queryOrdered(byChild: "sortTimestamp").removeObserver(withHandle: postRefHandle!)
//try 3:
//query.removeObserver(withHandle: postRefHandle!)
}
//try 4:
//postRef.removeAllObservers() //works
}
func getPosts()
{
var count = 20
query = postRef.queryOrdered(byChild: "sortTimestamp")
postRefHandle = query.queryLimited(toFirst: UInt(count)).observe(.childAdded //etc.
}
Run Code Online (Sandbox Code Playgroud)
所以我尝试了viewDidDisappear中的三个方法,但是没有删除观察者.尝试3来自Firebase的 query.removeObserver(withHandle:postRefHandle!),如何返回句柄以便我可以调用removeObserver?作者:frank-van-puffelen
唯一有效的是try 4中概述的那个.我无法用removeObserver删除Observer的任何原因(withHandle?(try 1 - 3)
另外"query.queryLimited(toFirst:UInt(count)).观察(.childAdded"没有从Firebase获取最新数据.我认为观察总是得到更新的数据,而不是observeSingleEvent.为什么不是去做?
任何建议都非常感谢.
如果您有以下代码:
var postsRef: FIRDatabaseReference!
var postRefHandle: FIRDatabaseHandle!
var query = FIRDatabaseQuery()
func addHandler() {
self.postsRef = self.ref.child("posts")
var count = 20
self.query = self.postsRef.queryOrdered(byChild: "sortTimestamp")
self.postRefHandle = self.query.queryLimited(toFirst: UInt(count)).observe(.childAdded, with: { snapshot in
print(snapshot)
})
}
Run Code Online (Sandbox Code Playgroud)
以后你会做这个功能
self.postsRef.removeObserver(withHandle: self.postRefHandle!)
Run Code Online (Sandbox Code Playgroud)
它删除了观察者.这是经过测试的代码.
对于问题的第二部分:querySingleEvent和observe在数据方面做同样的事情,但有不同的行为.它们都将始终获得当前数据 - 由startAt,endAt,equalTo等修改.
observeSingleEvent返回数据,不会留下观察者,因此如果数据发生变化,您将不会收到通知
observe返回数据并将观察者附加到节点,并将通知您将来的更改.
.childAdded:当任何子节点被添加到节点时.childChanges:当节点中的任何子节点发生变化时.childRemoved:删除子节点时.
| 归档时间: |
|
| 查看次数: |
3621 次 |
| 最近记录: |