这是我的观察事件代码:
let databaseRef = FIRDatabase.database().reference()
let query = databaseRef.child("palettes").queryOrdered(byChild: UserDefaults.standard.string(forKey: "UserTypeState")!).queryEqual(toValue: modifiedColor.hexValue())
// Change the value to the value of the color.
query.observe(.childAdded, with: { (snapshot) in
let URL = snapshot.childSnapshot(forPath: "URL").value as! String
self.URLArrayString.append(URL)
self.collectionView?.reloadData() //Reloads data after the number and all the URLs are fetched
self.noResultsLabel.isHidden = true
})
如何在调用特定观察者时检索句柄,以便在viewDidDissapear时将其删除?
答案 0 :(得分:2)
当你致电observe
时,它会返回已注册观察者的句柄。
您将此句柄传递给removeObserverWithHandle()
以移除观察者。
let handle = query.observe(.childAdded, with: { (snapshot) in
....
})
然后:
query.removeObserverWithHandle(handle)
答案 1 :(得分:0)
在Swift 3中我正在使用
deinit {
refName.removeAllObserver()
}
其中refName是您的引用名称。
还有另一种选择,使用:
private var updatedMessageRefHandle: FIRDatabaseHandle?
...
...
deinit {
if let refHandle = newMessageRefHandle {
messageRef.removeObserver(withHandle: refHandle)
}
if let refHandle = updatedMessageRefHandle {
messageRef.removeObserver(withHandle: refHandle)
}}
但在第二种情况下,您必须在代码中描述refHandle。