【发布时间】:2016-04-05 19:15:55
【问题描述】:
我有一个 tabBarController(在我的例子中是 4 个 tabBarViewControllers)。其中三个我有 Firebase 观察者,我在 viewWillAppear 中加载并在 viewDidDisappear(ref.removeAllObservers()) 中删除。
我在下一个视图中添加它们,但不知何故,它们没有为某些观察者注册(特别是 .ChildChanged)。
如果我移动到模态呈现的 viewController(比如设置)并返回,观察者会工作。如果我从 tabBarViewController 移动,我在其中删除观察者(在 viewDidDisappear 中),然后将它们(在 viewWillAppear 中)添加到新的 tabBarViewController 中,它们不会注册。
最重要的是,如果我通过 push segue 完全移出 tabBarController(从完全移除观察者的视图)到单独的 viewController(在我的情况下是 JSQMessagesViewController),则观察者会出现在 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。并且在其上推送的 viewController 也被视为单个 viewController 的一部分(在某些情况下)。
因此我想知道:在 tabBarViewController 中添加和删除观察者的最佳实践是什么?
【问题讨论】: