加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:17:28 所属栏目:百科 来源:网络整理
导读:我的视图控制器需要发送消息到几个模型对象.如何在视图控制器中获取对这些模型对象的引用? 这些模型对象是“单例”(因为它们只能在系统中一次只有一个副本),并且它们被多个视图控制器使用.所以我不能在每个视图控制器的init方法中实例化它们. 我不能使用构
我的视图控制器需要发送消息到几个模型对象.如何在视图控制器中获取对这些模型对象的引用?

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

希望它有帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读