Firebase swift tabBarController 最佳实践

Posted

技术标签:

【中文标题】Firebase swift tabBarController 最佳实践【英文标题】:Firebase swift tabBarController Best practices 【发布时间】: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 中添加和删除观察者的最佳实践是什么?

【问题讨论】:

【参考方案1】:

以防万一有人想知道,我确实设法对其进行了排序:

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

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

现在这个观察者记录了所有标签的变化。当移动到另一个视图控制器(通过模态呈现的视图控制器)时,它会移除观察者。并在返回任何选项卡时让观察者恢复活动。

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

所以一个带有各种 tabBarViewControllers 的 tabBarController 确实被视为一个单独的 viewController。

【讨论】:

以上是关于Firebase swift tabBarController 最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 与 Swift

无法将 Firebase 导入 Swift 类

新的 Firebase 数据导致 TableView 单元格闪烁 (Firebase/iOS/Swift)

查询和 Firebase 中的位置(swift 3)

设置值 Firebase - Swift 3

使用 Firebase (Swift) 进行单元测试