gpt4 book ai didi

objective-c - 如何将依赖项注入(inject) iOS View Controller ?

转载 作者:技术小花猫 更新时间:2023-10-29 11:01:27 26 4
gpt4 key购买 nike

我的 View Controller 需要向几个模型对象发送消息。我如何在 View Controller 中获取对这些模型对象的引用?

这些模型对象是“单例”(因为系统中一次应该只有它们的一个副本)并且它们被多个 View Controller 使用。所以我无法在每个 View Controller 的 init 方法中实例化它们。

我不能使用构造函数注入(inject),因为运行时选择用于创建 View Controller 的 init 方法。

我不能使用“setter 注入(inject)”,因为在任何时候(据我所知)我都没有对新构造的 View Controller 的引用和对“单例”模型对象的引用。

不想将模型对象转换为适当的单例并从 View Controller 对它们调用静态方法来检索单例实例,因为这是可测试性的问题。 (将模型对象作为 AppDelegate 的属性与这样做本质上是一样的。)

我使用的是 iOS 6 和 Storyboard。

最佳答案

我刚刚遇到了同样的问题。因为我使用的是 Storyboard,所以我没有实例化我的 UIViewControllers,所以我不能使用“构造函数注入(inject)”。我必须使用 setter 注入(inject)辞职。

我的应用根目录是一个 UITabViewController。假设它有两个 UINavigationController,第一个是 AControllerView,第二个是 BControllerView。在 AppDelegate.applicationDidFinishLaunchingWithOptions 中,您可以通过这种方式检索根 Controller :


UITabBarController *tabBarController = (UITabBarController *) self.window.rootViewController;

然后您可以遍历 Controller :

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 - 如何将依赖项注入(inject) iOS View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13169407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com