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

标签 ios objective-c uitabbarcontroller viewcontroller

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

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

应用初始点的 TabBarController 有 3 个选项卡,然后通过 NavigationControllers 开始在 ViewControllers 中导航。

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

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

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

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

最佳答案

有许多可能的解决方案。看起来您的 Controller 甚至不需要成为 View Controller ,因为它的实际职责是数据。

因此,我建议创建一个 View Controller ,它基本上是启动图像的副本,也许带有进度指示器,但它所做的只是坐在那里等待 - 没有逻辑。逻辑位于它(或应用程序委托(delegate))触发的数据 Controller 中。逻辑完成后,“启动 VC”会收到回调并推送到选项卡 Controller 。

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

关于ios - 具有共享数据的应用程序的初始点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29531494/

相关文章:

ios - 监听多个 UUID 的应用程序

java - SOAP Web 服务 - Java 服务器 - iOS 客户端 - SudzC 发送或接收大文件

objective-c - 从另一个类添加和控制 UIImageView subview

ios - 以编程方式调整 Nib 的大小会使区域变为非事件区域

swift - PopToRootViewController 在一个标签栏项目中来自另一个标签栏项目

ios - 在 SpriteKit 中实现无限/重复滚动世界的最佳方法是什么?

ios - 在 ios7 xcode 中设置相机焦点。打开简历

ios - 从导航栏 View Controller 导航到标签栏 View Controller

iphone - 拍摄快照时,显示出很少的白色背景颜色

iphone - 如何在iPhone上进行更换segue?