具有共享数据的应用程序的初始点

Initial point of app with shared data

这是我的 iOS 应用程序的结构:

                 / NavigationController -> ViewController -> ...
TabBarController - NavigationController -> ViewController -> ...
                 \ NavigationController -> ViewController -> ...

TabBarController 在带有 3 个选项卡的应用程序的初始点,然后通过 NavigationControllers 在 ViewController 秒内开始导航。

我需要在应用程序中有一个位置可以访问嵌入在 NavigationController 中的每个 ViewController。可以说它是一个控制器,它是一些通知的观察者并将数据发送到 ViewControllers。这个controller也需要在app启动后做一些操作

我的问题是这个控制器应该放在应用程序中的什么位置。第一个想法是将所有代码放入 TabBarController 中,因为它是初始点,因此它可以在启动后进行操作,并且可以通过 NavigationControllers 访问 ViewControllers。但是 TabBarController 只是容器,所以它不应该包含与导航无关的额外代码,对吗?

下一个想法是将 ViewController 放在 TabBarController 之前,这样 ViewController 就是应用程序的初始点。在 viewDidLoad 上,我执行了一些启动时必须执行的操作,然后注册观察者以获取通知,在 viewDidAppear 上,我提供了 TabBarController。但问题是当我想将数据传递给 ViewControllers 时,这些数据必须通过 2 个容器(TabBarController 和 NavigationController)发送,这似乎很复杂。

你怎么看?我应该为此目的使用 TabBarController 还是应该创建新的 ViewControler 作为新的初始点?或者我应该使用 app delagate 吗?谢谢

有很多可能的解决方案。看来您的控制器甚至不需要成为视图控制器,因为它的实际职责是数据。

所以,我建议创建一个视图控制器,它基本上是启动图像的副本,可能带有进度指示器,但它所做的只是坐在那里等待 - 没有逻辑。逻辑位于它(或应用程序委托)触发的数据控制器中。逻辑完成后,'launch VC' 获得回调并推送到选项卡控制器。

现在您可以选择注入、单例引用或观察数据控制器如何与选项卡通信。如果视图控制器不向数据控制器发出请求,那么观察数据事件似乎是最好的选择。如果他们这样做,那么注射可能是最好的。