【问题标题】:Swift, FIrebase - Can't remove observers by removeAllObserversSwift,FIrebase - 无法通过 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。

标签: swift firebase firebase-realtime-database


【解决方案1】:

在一个节点上调用removeAllObservers,只会从那个节点中移除所有的观察者。它不会从子节点中移除观察者。

所以你的代码:

self.ref.child("users").removeAllObservers()

这只会从users 中删除观察者。它不会从users/$userId/contactList 中删除观察者。要删除后者,您必须在 那个 特定节点上调用 removeAllObservers,这意味着您需要跟踪您已将观察者附加到哪些节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 2017-03-03
    • 1970-01-01
    • 2018-01-06
    相关资源
    最近更新 更多