"试图弹出一个不存在的视图控制器."

sky*_*erl 13 iphone objective-c uiviewcontroller uinavigationcontroller

当我调用我的方法dismissView时,我收到此错误.这是方法存根:

-(IBAction)dismissView
{
    RootViewController *rootController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
    [self.navigationController popToViewController:rootController animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

这应该工作,我已经检查过,rootController被初始化和分配.有任何想法吗?

Joa*_*que 26

我最近遇到了这个问题并用这样的东西解决了......

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
Run Code Online (Sandbox Code Playgroud)

  • swift 3实现`let _ = self.navigationController?.popToViewController((self.navigationController?.viewControllers [1])as!HomeViewController,animated:true)` (3认同)

Llo*_*ell 13

我用pushViewController而不是用来解决这个问题popToViewController


Ben*_*ieb 12

-popToViewController用于弹出视图控制器OFF堆栈,下降到一个已经存在.你UINavigationController有一堆ViewControllers(存储在viewControllers属性中),当你popToViewController,你想要传递该数组中的一个元素作为第一个参数.

在这种情况下-popViewControllerAnimated:,您最可能想要做的是使用,这将从ViewController堆栈中删除顶部


Chr*_*ris 7

斯威夫特 4

对于任何仍在寻找不涉及UINavigationController堆栈索引的更好解决方案的人来说,更大的导航堆栈会带来更多问题 - 这是解决此问题的最简单方法:

if let destinationViewController = navigationController?.viewControllers
                                                        .filter(
                                      {$0 is DestinationViewController})
                                                        .first {
    navigationController?.popToViewController(destinationViewController, animated: true)
}
Run Code Online (Sandbox Code Playgroud)


Chu*_*uck 6

您正在那里分配 RootViewController。它不存在于导航控制器的堆栈中,因此无论您弹出多远,都无法到达它。