以下是我的iOS应用程序的结构:
/ NavigationController -> ViewController -> ...
TabBarController - NavigationController -> ViewController -> ...
\ NavigationController -> ViewController -> ...
TabBarController在应用程序的初始点有3个选项卡,然后通过NavigationControllers开始浏览ViewControllers。
我需要在app中有一个位置可以访问导航控制器中的每个ViewController。让我们说它是一个控制器,它是一些通知的观察者并将数据发送到ViewControllers。启动应用程序后,此控制器还需要执行一些操作。
我的问题是应该将此控制器放在应用程序中。第一个想法是将所有代码放入TabBarController,因为它是初始点,因此它可以在启动后执行操作,并可以通过NavigationControllers访问ViewControllers。但是TabBarController只是容器,所以它不应该包含与导航无关的其他代码,对吧?
接下来的想法是将ViewController放在TabBarController之前,以便ViewController成为应用程序的初始点。在viewDidLoad
我执行一些在启动时必须执行的操作,然后注册观察者以获取通知,并在viewDidAppear
上显示TabBarController。但问题是,当我想将数据传递给ViewControllers时,这些数据必须通过2个容器(TabBarController和NavigationController)发送,这似乎相当复杂。
答案 0 :(得分:1)
有许多可能的解决方案。看起来您的控制器甚至不需要是视图控制器,因为它的实际责任是数据。
所以,我建议创建一个视图控制器,它基本上是启动图像的副本,可能带有进度指示器,但它只是坐在那里等待 - 没有逻辑。逻辑位于它(或应用程序委托)触发的数据控制器中。当逻辑完成时,'启动VC'获得回调并推送到选项卡控制器。
现在您可以选择注入,单例引用或观察数据控制器如何与选项卡进行通信。如果视图控制器不向数据控制器发出请求,则观察数据事件似乎是最佳选择。如果他们这样做,那么注射可能是最好的。