
这些模型对象是“单例”(因为它们只能在系统中一次只有一个副本),并且它们被多个视图控制器使用.所以我不能在每个视图控制器的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 }} 希望它有帮助.
总结以上是内存溢出为你收集整理的objective-c – 如何将依赖关系注入iOS视图控制器?全部内容,希望文章能够帮你解决objective-c – 如何将依赖关系注入iOS视图控制器?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)