ios - 我的 Firebase 观察者不会停止观察
问题描述
在我的:
override func viewWillAppear(_ animated: Bool)
我这样创建我的 Firebase 观察者:
poolsRef.child(pID).child("lock").observe(.value, with: { snapshot in
boxesRef.child(pID).observe(.value, with: { snapshot in
coordRef.child(pID).child("x").observe(.value, with: { snapshot in
coordRef.child(pID).child("y").observe(.value, with: { snapshot in
poolsRef.child(pID).child("Winner").observe(.value, with: { snapshot in
playersRef.child("pID").observe(.value, with: { snapshot in
然后在
override func viewDidDisappear(_ animated: Bool)
我调用 removeAllObservers:
coordRef.removeAllObservers()
poolsRef.removeAllObservers()
boxesRef.removeAllObservers()
playersRef.removeAllObservers()
问题是,当我离开创建所有观察者的视图时,甚至认为 removeAllObservers() 被调用时,viewDidDisappear
我完全不是一个不同的视图,如果我直接转到 Firebase 并更改之前的数据与上面提到的观察者有关,我可以看到应用程序仍在侦听不应该的时候!?
我该如何解决这个问题!!
解决方案
来自 文档
在侦听器上调用 removeObserverWithHandle 或 removeAllObservers 不会自动删除在其子节点上注册的侦听器;您还必须跟踪这些引用或句柄以删除它们。
poolsRef.child(pID).child("lock").removeAllObservers()
poolsRef.child(pID).child("Winner").removeAllObservers()
与其他观察者依此类推
推荐阅读
- git - 协助变基和合并
- mdriven - 本地 iisexpress 中的 BorPred - 是内存泄漏吗?
- java - spring boot .war tomcat 应用程序日志不存在
- sql - SQlite 以每列值大于当前值为条件插入或替换
- java - Hibernate 数据库迁移 - 合并重复实体
- javascript - 如何使用 html/css 在 reactjs 录音机上绘制音频频率图
- node.js - 如何在 Node.js 中修复此回调错误?
- tensorflow - Tensorflow 导出计算图的方法有什么区别?
- c# - 从 MVC 操作返回数据和文件
- system-verilog - 检查 SVA 过去发生的事件的最佳方法是什么?