ios - Firebase 数据库分离监听器

标签 ios swift firebase firebase-realtime-database

在我的应用程序中,我获取如下实时数据:

//Firebase
var ref: FIRDatabaseReference?
var handle: FIRDatabaseHandle?

override func viewDidLoad() {

ref = FIRDatabase.database().reference()
handle = ref?.child("posts").child(String(itemId)).observe(.childChanged, with: { (snapShot) in
                        if let item = snapShot.value as? String {
                            print(item)
                        }
                    })

.....

现在阅读 firebase 文档,我看到了这一点:

当您离开 ViewController 时,观察者不会自动停止同步数据。如果观察者没有被正确删除,它会继续将数据同步到本地内存。

所以我添加了这个函数,当我退出 VC 时该函数会被触发:

@IBAction func backButtonDidTouch(_ sender: AnyObject) {
        if let handle = handle {
                    ref?.removeObserver(withHandle: handle)
                }
        showNavBar = true
        _ = navigationController?.popViewController(animated: true)
    }

但我也可以在 removeObserver() 的 insetad 中调用 removeAllObservers() 并且文档还说:

在监听器上调用removeObserverWithHandleremoveAllObservers不会自动删除在其子节点上注册的监听器;您还必须跟踪这些引用或句柄以将其删除。

那么看看我的代码我做得对吗?当我退出 VC 时,我不想在应用程序和 Firebase 之间保持数据同步

最佳答案

您似乎在特定帖子上调用观察者,但您正在从父引用中删除观察者。正如文档所述,从引用中删除监听器并不会清除子级中的观察者,因此我相信您没有按预期删除观察者。

关于ios - Firebase 数据库分离监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43461191/

相关文章:

iphone - 主 UIView 的 X 和 Y 坐标在界面生成器中不是 0,0

ios - Facebook 是否再次允许获取用户的好友列表?

javascript - React-Native for-loop through large size array 性能问题

javascript - AngularJS - Firebase重置密码更改没有得到反射(reflect)

firebase - 导出firebase cloud firestore数据到云存储,数据加密了现在怎么用?

ios - 如何根据通知类型禁用通知?

swift - 如何计算 Swift 中当前日期的剩余小时数

ios - 如何动态地将动画添加到队列中

ios - 如何从注释中获取属性数据?

android - Firebase 为什么从节点下载所有数据??即使有时间戳