我的视图控制器需要向几个模型对象发送消息。如何获取视图控制器内这些模型对象的引用?
这些模型对象是“单例”(因为系统中一次只能有它们的一份副本),并且它们由多个视图控制器使用。所以我无法在每个视图控制器的 init 方法中实例化它们。
我无法使用构造函数注入,因为运行时选择用于创建视图控制器的 init 方法。
我不能使用“setter 注入”,因为(据我所知)我没有对新构造的视图控制器的引用和对“单例”模型对象的引用。
I don't want将模型对象转换为适当的单例,并从视图控制器调用它们的静态方法以检索单例实例,因为这是可测试性的问题。 (将模型对象作为 AppDelegate 的属性本质上与执行此操作相同。)
我正在使用 iOS 6 和 Storyboards。
我刚刚处理过同样的问题。由于我使用的是故事板,所以我不会实例化我的UIViewControllers
,所以我不能使用“构造函数注入”。我必须使用 setter 注入来辞职。
我的应用程序根目录是UITabViewController
。假设它有两个UINavigationController
s,第一个 aAControllerView
和第二个BControllerView
. In 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
}
}
希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)