Firebase swift tabBarController最佳实践

时间:2016-04-05 19:15:55

标签: swift firebase

我有一个tabBarController(在我的例子中有4个tabBarViewControllers)。其中三个我有Firebase观察者,我在viewWillAppear中加载并在viewDidDisappear中删除(ref.removeAllObservers())。

我在下一个视图中添加它们,但不知何故它们没有注册一些观察者(特别是.ChildChanged)。

如果我移动到一个模态呈现的viewController(比如设置)并向后移动,观察者就可以了。如果我从tabBarViewController移动,我删除了观察者(在viewDidDisappear中),然后在新的tabBarViewController中添加它们(在viewWillAppear中),它们不会注册。

最重要的是,如果我完全移出tabBarController(从我完全删除观察者的视图)到push segue(在我的情况下是一个JSQMessagesViewController)的单独viewController,那么tabBarViewController中存在的观察者也不要在新的viewController中注册(它不是tabBarViewController的一部分)。

我已经阅读了有关iOS UIViewController和Firebase(https://www.firebase.com/blog/2015-10-15-best-practices-uiviewcontroller-ios-firebase.html以及帖子Firebase: when to call removeObserverWithHandle in swift)的最佳做法的文章,但不知何故似乎不适用于tabBarControllers。

我猜是带有各种tabBarViewControllers的tabBarController在某种程度上被视为单个viewController。并且那个viewControllers在其上面被视为单个viewController的一部分(在某些情况下)。

因此我想知道:在tabBarViewController中添加和删除观察者方面的最佳实践是什么?

1 个答案:

答案 0 :(得分:1)

万一有人想知道,我确实设法对它进行排序:

创建自定义TabBarController.swift文件(子类UITabBarController)

在viewWillAppear中我创建了观察者,在viewDidDisappear中删除了。

现在,这个观察者记录了整个选项卡的变化。移动到另一个viewController时,它会删除观察者(通过模态显示的viewController)。回到任何一个标签时,让观察者恢复活力。

仍然没有通过push segue这样做。我在调用(push)segue之前设置了removeAllObservers()来解决这个问题。 (在那里,我再次创建了相同的观察者,用于在其他chatNodes上发出声音通知)。 (但是我必须在该选项卡中创建相同的观察者,当从那个childViewController移回时再次激活。)

因此,具有各种tabBarViewControllers的tabBarController确实被视为单个viewController。