我有一些控制器,并使用Typhoon将对象作为属性注入到这些控制器中。我使用了Plist集成。我发现有时对象没有按预期注入视图控制器。

例如,MainTabBarController是初始视图控制器,而SplashViewController是其他视图控制器。我已将对象作为代码中的属性注入。验证对象已注入到MainTabBarController中。

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

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

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

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

经过一番调查,我发现通过调用[UIStoryboard storyboardWithName:@“Main”
bundle:[NSBundle mainBundle]]不是TyphoonStoryboard,但是MainTabBarController的不是TyphoonStoryboard。因此,我将其更改为:
SplashViewController *vc = [self.storyboard
                     instantiateViewControllerWithIdentifier:@"SplashNavigationController"];

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

然后SplashViewController包含注入的对象。我想确认是否会出现这种现象,这是处理此类问题的正确方法。

非常感谢!

最佳答案

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

  • 在应用程序的plist中定义为UILaunchStoryboardName的情节提要(如果有的话)将是TyphoonStoryboard的一个实例,它就像普通的故事板一样工作,其附加好处是可以根据plist中定义的程序集注入依赖项。
  • 像某些人一样,以编程方式创建其他情节提要(例如,将情节提要划分为用例),需要TyphoonStoryBoard实例来进行依赖项注入。

  • 如果要在装配中定义该情节提要,则可以执行以下操作:
    - (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]];
                }];
        }];
    }
    

    并将此情节提要提供给任何需要的组件。

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

    10-09 06:29
    查看更多