Swift,FIrebase - 无法通过 removeAllObservers 删除观察者
Posted
技术标签:
【中文标题】Swift,FIrebase - 无法通过 removeAllObservers 删除观察者【英文标题】:Swift, FIrebase - Can't remove observers by removeAllObservers 【发布时间】:2018-05-24 11:49:39 【问题描述】:我一直在尝试移除观察者一段时间,但不知何故我从未成功。我在这里查看了其他帖子,但找不到原因。
这是我的代码:
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()
如果有任何建议,我将不胜感激!
【问题讨论】:
对observe
的调用应返回一个句柄,您可以稍后将其用于remove
。
【参考方案1】:
在一个节点上调用removeAllObservers
,只会从那个节点中移除所有的观察者。它不会从子节点中移除观察者。
所以你的代码:
self.ref.child("users").removeAllObservers()
这只会从users
中删除观察者。它不会从users/$userId/contactList
中删除观察者。要删除后者,您必须在 那个 特定节点上调用 removeAllObservers
,这意味着您需要跟踪您已将观察者附加到哪些节点。
【讨论】:
以上是关于Swift,FIrebase - 无法通过 removeAllObservers 删除观察者的主要内容,如果未能解决你的问题,请参考以下文章
iOS Swift 使用 Firebase 云消息发送丰富的推送通知
如何从firebase数据库中检索url并通过UIButton(SWIFT)显示url?