如何正确转换视图控制器

时间:2014-07-19 19:00:09

标签: ios objective-c unrecognized-selector

我遇到了投射视图控制器的问题。这是我的appdelegate中的代码片段:

        InitViewController *initVC = (InitViewController *)self.window.rootViewController;
        VMParentVC *topVC = (VMParentVC *) initVC;
        [topVC navigateToMain];

我正在尝试做的是转换rootViewController,以便我可以使用我的VMParentVC类中的方法。但是当我这样做时,我得到了这个错误:

“[UINavigationController navigateToMain]:无法识别的选择器发送到实例”

不太确定我做错了什么。

1 个答案:

答案 0 :(得分:5)

该错误意味着您在-navigateToMain的实例上调用UINavigationController,这不是您想要的。

这种情况可能正在发生,因为您的窗口的根视图控制器是UINavigationController实例,您正在寻找的视图控制器是导航堆栈中的第一个视图控制器。如果是这种情况,您想要查看UINavigationController中的第一个视图控制器:

 UINavigationController *navigationController = (UINavigationController*)self.window.rootViewController;
 *topVC = (VMParentVC *) navigationController.viewControllers[0];
  [topVC navigateToMain];

在您从导航堆栈中提取视图控制器之后,检查视图控制器是否实际上是您认为应该是这样的类也更安全:

 UINavigationController *navigationController = (UINavigationController*)self.window.rootViewController;
 UIViewController * topVC = navigationController.viewControllers[0];

 if ( [topVC isKindOfClass:([VMParentVC class])] ) {     
      [((VMParentVC *)topVC) navigateToMain];
 }