objective-c – 如何将依赖关系注入iOS视图控制器?

objective-c – 如何将依赖关系注入iOS视图控制器?,第1张

概述我的视图控制器需要发送消息到几个模型对象.如何在视图控制器中获取对这些模型对象的引用? 这些模型对象是“单例”(因为它们只能在系统中一次只有一个副本),并且它们被多个视图控制器使用.所以我不能在每个视图控制器的init方法中实例化它们. 我不能使用构造函数注入,因为运行时会选择用于创建视图控制器的init方法. 我不能使用“setter注入”,在任何时候(我所知道的),我有两个引用新构造的视图控制 我的视图控制器需要发送消息到几个模型对象.如何在视图控制器中获取对这些模型对象的引用?

这些模型对象是“单例”(因为它们只能在系统中一次只有一个副本),并且它们被多个视图控制器使用.所以我不能在每个视图控制器的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视图控制器?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1245965.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存