我正在寻找与Firebase completion block类似的内容,以确认我在切换到下一个ViewController之前删除了所有Firebase回调
ref.removeAllObservers()
let resultController = self.storyboard!.instantiateViewControllerWithIdentifier("Home") as! UIViewController
self.presentViewController(resultController, animated: true, completion: nil)
答案 0 :(得分:3)
是什么让你认为在removeAllObservers()
调用期间没有删除观察者,这个操作是异步的,你应该等待什么?没有必要,它是同步操作。
通常,请勿使用removeAllObservers()
删除观察者,因为这样您也可以删除由其他类添加的观察者。最好将FirebaseHandle
的数组保存在某处,并在不需要时将其逐个删除。
Detaching Blocks描述了它。
答案 1 :(得分:3)
Firebase API中没有“显示所有已注册的观察者”方法。
那就是说:如果你遇到了挥之不去的观察者,你可能会在子节点中注册它们,但只在顶级ref上调用removeAllObservers
。您必须从最初注册它的确切引用/子项中删除每个观察者。
请参阅web docs for off
:
在父侦听器上调用
off()
不会自动删除在子节点上注册的侦听器,还必须在任何子侦听器上调用off()
以删除回调。