具有共享数据的app的初始点

时间:2015-04-09 06:39:42

标签: ios objective-c uitabbarcontroller viewcontroller

以下是我的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)发送,这似乎相当复杂。

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

1 个答案:

答案 0 :(得分:1)

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

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

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