objective-c – 如何将依赖关系注入iOS视图控制器?
我的视图控制器需要发送消息到几个模型对象.如何在视图控制器中获取对这些模型对象的引用?
这些模型对象是“单例”(因为它们只能在系统中一次只有一个副本),并且它们被多个视图控制器使用.所以我不能在每个视图控制器的init方法中实例化它们. 我不能使用构造函数注入,因为运行时会选择用于创建视图控制器的init方法. 我不能使用“setter注入”,在任何时候(我所知道的),我有两个引用新构造的视图控制器和引用“单例”模型对象. 我不想将模型对象转换成正确的单例,并从视图控制器调用静态方法来检索单例实例,因为这是可测试性的一个问题. (将模型对象作为AppDelegate上的属性与执行此操作基本相同). 我正在使用iOS 6与Storyboards. 解决方法
我刚刚处理同样的问题.由于我使用的是故事板我不会实例化我的UIViewControllers,所以我不能使用“构造函数注入”.我必须使用setter注入辞职.
我的应用程序根目录是一个UITabViewController.假设它有两个UINavigationControllers,拥有第一个AControllerView和第二个BControllerView.在AppDelegate.applicationDidFinishLaunchingWithOptions中,您可以通过以下方式检索根控制器: UITabBarController * tabBarController =(UITabBarController *)self.window.rootViewController; 然后你可以遍历控制器: NSArray* viewControllers = [tabBarController viewControllers]; for (UIViewController *viewController in viewControllers) { UINavigationController *navigationController = (UINavigationController*) viewController; UIViewController *viewController = navigationController.topViewController; if ([viewController isKindOfClass: [AControllerView class]]) { AControllerView *a = (AControllerView*) viewController; // Inject your stuff } if ([viewController isKindOfClass: [BControllerView class]]) { BControllerView *b = (BControllerView*) viewController; // Inject your stuff } } 希望它有帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- The Swift Programming Language学习笔记(十三)——下标
- 合成/聚合复用原则(CSRP 笔记)
- c# – 从控制台调用的Form.Show()冻结了GUI
- Oracle创建表空间实例一则
- c# – 通用列表中的Orderby
- Binary XML file line #4: <item> tag requires a
- cocos2d-x 贝塞尔曲线的简单运用(CCBezierTo,CCBezierBy)
- swift – Cocoapod podspec上的Preprocesor标志
- 如何在客户端解析服务器传过来的xml文件
- Postgresql version 9.0 和之前版本的一个BUG