10

我在调用我的方法dismissView时遇到此错误。这里是方法存根:'试图弹出到不存在的视图控制器。'

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

这应该工作,我检查,rootController初始化和分配。有任何想法吗?

回答

20

最近我有这个问题,像这样的东西解决了......

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES]; 
+0

感谢,适用于我的情况 – tesmojones 2014-06-05 07:34:57

+0

迅速实现3'让_ = self.navigationController .popToViewController((self.navigationController .viewControllers [1])作为HomeViewController,动画:?!真)?' – 2016-10-25 06:55:15

10

-popToViewController用于将视图控制器关闭堆栈,直至已经存在的视图控制器。您的UINavigationController有一堆ViewControllers(存储在viewControllers属性中),当您要popToViewController时,您将要传递该数组中的其中一个元素作为第一个参数。

你最有可能想在这种情况下,做的是使用-popViewControllerAnimated:,这将从堆栈

4

你分配RootViewController的右边有去除顶部ViewController。它并不存在于导航控制器的堆栈中,所以无论你弹出多远,都不会触及它。

10

我解决了这个用pushViewController而不是popToViewController

4

如果您正在使用Storyboads,使用此赛格瑞:

#import "PopToControllerSegue.h" 

@implementation PopToControllerSegue 

- (void) perform 
{ 
    UIViewController *sourceViewController = (UIViewController *)self.sourceViewController; 
    UIViewController *destinationViewController = (UIViewController *)self.destinationViewController; 

    for (UIViewController* controller in sourceViewController.navigationController.viewControllers) { 
     if ([controller isKindOfClass:destinationViewController.class]) { 
      [sourceViewController.navigationController popToViewController:controller animated:YES]; 
      return; 
     } 
    } 

    NSLog(@"PopToControllerSegue has failed!"); 
} 

@end 
0

使用Push Segues时,您可以使用此方法轻松回到根目录:

[self.navigationController popToRootViewControllerAnimated:YES]; 

当使用模态塞格斯(因为这个词驳回问题的和作为一般参考),则可以使用此方法dismiss视图控制器:

[self dismissViewControllerAnimated:YES completion:nil]; 
1

UINavigationController具有的堆ViewControllers它存储在viewControllers(NSArray)属性中。列举到要求的ViewController并弹出到该ViewController

以下代码应该解决问题。

-(IBAction)dismissView 
{ 
    NSArray *array = self.navigationController.viewControllers; 
    for (id controller in array) { 
     if ([controller isKindOfClass:[RootViewController class]]) { 
      [self.navigationController popToViewController:controller animated:YES]; 

     } 
    } 
}