Swift,FIrebase - 无法通过 removeAllObservers 删除观察者

标签 swift firebase firebase-realtime-database

一段时间以来,我一直在尝试移除观察者,但不知何故我从未成功过。我在这里查看了其他帖子,但找不到原因。

这是我的代码:

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/

相关文章:

ios - 确定您的应用程序之前是否在 iOS 中安装过

java - Firebase RecyclerView - 如何只显示过滤后的数据?

java - 删除用户id下的单个 child ,随机生成的 child 名,android studio,firebase

java - Firebase - 实时数据库为用户抛出异常设置附加值

swift - Xcode/plist - 在 macOS 上始终以深色/浅色主题运行应用程序

ios - 如何在 UIBarButtonItem 中制作一个箭头,就像快速的后退按钮箭头一样

ios - 有很多嵌套的 UITableViews 是可以的还是有更好的方法来实现这个?

ios - 在不先观察数组的情况下在 Swift 中将项目添加到 Firebase 数组

android - Firebase 动态链接 - 打开应用的多个实例

android - 获取 Firebase Android 评分的平均值