如何正确地转换视图控制器

3

我遇到了一个关于视图控制器转换的问题。这是我的appdelegate中代码的一部分:

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

我想要做的是将rootViewController转换为VMParentVC类的对象,以便可以在其上使用VMParentVC类中的方法。但是当我这样做时,会出现以下错误:
"[UINavigationController navigateToMain]:未识别的选择器发送到实例"
不太确定我做错了什么。
1个回答

6
那个错误意味着你正在调用一个 -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];
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接