一段时间以来,我一直在尝试移除观察者,但不知何故我从未成功过。我在这里查看了其他帖子,但找不到原因。
这是我的代码:
var ref: DatabaseReference!
let timeStamp: Double = NSDate().timeIntervalSince1970
override func viewDidLoad() {
super.viewDidLoad()
self.ref = Database.database().reference()
guard let userId = Auth.auth().currentUser?.uid else { return }
self.ref.child("users").child(userId).child("contactList").observe(.value, with: { (snapshot) in
guard let children = snapshot.value as? [String: Any] else { return }
for child in children {
guard let dictionary = child.value as? [String: Any] else { return }
guard let timeStamp = dictionary["timeStamp"] as? String else { return }
guard let timeStampDouble = Double(timeStamp) else { return }
if timeStampDouble > self.timeStamp {
self.navigationController?.pushViewController(HomeController(), animated: true)
}
}
}) { (err) in
print("Failed to fetch user: ", err)
}
}
deinit {
self.ref.child("users").removeAllObservers()
}
如有任何建议,我将不胜感激!
最佳答案
在一个节点上调用removeAllObservers
,仅从那个节点移除所有观察者。它不会从子节点中删除观察者。
所以你的代码:
self.ref.child("users").removeAllObservers()
这只会从 users
中移除观察者。它不会从 users/$userId/contactList
中删除观察者。要删除后者,您必须在 那个 特定节点上调用 removeAllObservers
,这意味着您需要跟踪已将观察器附加到哪些节点。
关于Swift,FIrebase - 无法通过 removeAllObservers 删除观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50508668/