我的视图控制器需要发送消息到几个模型对象.如何在视图控制器中获取对这些模型对象的引用?
这些模型对象是“单例”(因为它们只能在系统中一次只有一个副本),并且它们被多个视图控制器使用.所以我不能在每个视图控制器的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 } }
希望它有帮助.