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?

循环通过值事件类型并在 swift 中使用 Firebase 生成值 UIButton 的 titleLabel

无法将 Firebase 导入 Swift 类

Firebase,Swift:无法检索数据

读取引发的 Firebase 身份验证错误(Firebase 3.x 和 Swift)