gpt4 book ai didi

ios - 台风从 Storyboard 中将属性注入(inject) View Controller

转载 作者:行者123 更新时间:2023-11-29 12:25:09 25 4
gpt4 key购买 nike

我有几个 Controller 并使用 Typhoon 将对象作为属性注入(inject)到这些 Controller 中。我使用了 Plist 集成。我发现有时对象没有按预期注入(inject)到 View Controller 中。

例如,MainTabBarController 是初始 View Controller ,而 SplashViewController 是其他 View Controller 。我已将对象作为代码中的属性注入(inject)。该对象被验证为注入(inject)到 MainTabBarController。

在某些时候,我需要从 MainTabBarController 中呈现 SplashViewController,如下所示:

SplashViewController *vc = [[UIStoryboard storyboardWithName:@"Main" 
bundle:[NSBundle mainBundle]]
instantiateViewControllerWithIdentifier:@"SplashNavigationController"];

[self presentViewController:vc
animated:YES
completion:nil];

当我尝试访问 SplashViewController 中的对象时,它失败了。该属性不包含该对象。

经过一些调查,我发现我通过调用 [UIStoryboard storyboardWithName:@"Main"获得的 Storyboard bundle:[NSBundle mainBundle]] 不是 TyphoonStoryboard,但是 MainTabBarController 的那个是 TyphoonStoryboard。因此,我将其更改为:

SplashViewController *vc = [self.storyboard 
instantiateViewControllerWithIdentifier:@"SplashNavigationController"];

[self presentViewController:vc
animated:YES
completion:nil];

然后 SplashViewController 包含注入(inject)的对象。我想确认这种行为是否是预期的,这是处理此类问题的正确方法。

非常感谢!

最佳答案

是的,这是预期的行为。如果您使用 plist 集成:

  • 在应用程序的 plist 中定义为 UILaunchStoryboardName 的 Storyboard (如果有)将是 TyphoonStoryboard 的一个实例,它的工作方式与普通 Storyboard 一样,并具有根据程序集注入(inject)依赖项的额外好处在你的 plist 中定义。
  • 以编程方式创建额外的 Storyboard ,如某些人所做的那样,例如,将 Storyboard 分成用例,需要一个 TyphoonStoryBoard 实例来进行依赖注入(inject)。

如果你想在程序集中定义 Storyboard,你可以这样做:

- (UIStoryboard *)storyboard
{
return [TyphoonDefinition withClass:[TyphoonStoryboard class] configuration:^(TyphoonDefinition *definition) {
[definition useInitializer:@selector(storyboardWithName:factory:bundle:)
parameters:^(TyphoonMethod *initializer) {
[initializer injectParameterWith:@"StoryboardName"];
[initializer injectParameterWith:self];
[initializer injectParameterWith:[NSBundle mainBundle]];
}];
}];
}

并将这个 Storyboard提供给任何需要它的组件。

关于ios - 台风从 Storyboard 中将属性注入(inject) View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29359605/

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