如何确认ref.removeAllObservers()已完成?

时间:2015-07-07 10:46:50

标签: ios swift firebase

我正在寻找与Firebase completion block类似的内容,以确认我在切换到下一个ViewController之前删除了所有Firebase回调

ref.removeAllObservers()
let resultController = self.storyboard!.instantiateViewControllerWithIdentifier("Home") as! UIViewController
self.presentViewController(resultController, animated: true, completion: nil)

2 个答案:

答案 0 :(得分:3)

是什么让你认为在removeAllObservers()调用期间没有删除观察者,这个操作是异步的,你应该等待什么?没有必要,它是同步操作。

通常,请勿使用removeAllObservers()删除观察者,因为这样您也可以删除由其他类添加的观察者。最好将FirebaseHandle的数组保存在某处,并在不需要时将其逐个删除。

Detaching Blocks描述了它。

答案 1 :(得分:3)

Firebase API中没有“显示所有已注册的观察者”方法。

那就是说:如果你遇到了挥之不去的观察者,你可能会在子节点中注册它们,但只在顶级ref上调用removeAllObservers。您必须从最初注册它的确切引用/子项中删除每个观察者。

请参阅web docs for off

  

在父侦听器上调用off()不会自动删除在子节点上注册的侦听器,还必须在任何子侦听器上调用off()以删除回调。