【问题标题】:'Tried to pop to a view controller that doesn't exist'试图弹出一个不存在的视图控制器
【发布时间】:2014-02-04 22:13:57
【问题描述】:

我知道很多用户都问过这个问题,但我没有找到适合我的问题的解决方案。

我正在使用splitViewController,我隐藏了我的rootViewController,在detailViewController 中我正在推送和弹出不同的ViewControllers

当我从ViewController-1 导航到ViewController-2 时,一切正常,当我再次使用[self.navigationController popViewControllerAnimated:NO ];viewController-2 返回到ViewController-1 时,一切正常。

现在,当我从 ViewController-2 导航到 ViewController-3 并返回到 ViewController-2 时,它工作正常。

但是现在当我从 ViewController-2 返回到 ViewController-1 时,它会因以下错误而崩溃。

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Tried to pop to a view controller that doesn't exist

我启用了僵尸对象。 image

我的应用程序代码如下: 1.AppDelegate

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.splitViewController =[[UISplitViewController alloc]init];

    // create master and detailViewController for splitView
    self.rootViewController=[[RootViewController alloc]init];
    self.detailViewController=[[LoginViewController alloc]initWithNibName:@"LoginViewController" bundle:nil] ;

    //create navigation controller for root and detailViewController
    self.rootNav=[[UINavigationController alloc]initWithRootViewController:rootViewController];
    self.detailNav=[[UINavigationController alloc]initWithRootViewController:detailViewController];

    //make hide navigation bar
    self.rootNav.navigationBarHidden = YES;
    self.detailNav.navigationBarHidden = YES;

    //set splitViewController with root and detail viewController
    self.splitViewController.viewControllers=[NSArray arrayWithObjects:self.rootNav,self.detailNav,nil];
    self.splitViewController.delegate=self.detailViewController;

    // Now Add the split view controller's view to the window and display.
    [self.window addSubview:self.splitViewController.view];
    self.window.rootViewController = self.splitViewController;
    [self.window makeKeyAndVisible];


    return YES;
}

2.push和pop ViewControllers

   push()
{
 AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
 MyViewController *Vc = [[MyViewController alloc]    initWithNibName:@"MyViewController" bundle:nil];

[appDelegate.detailNav pushViewController:Vc animated:NO];
}

pop()
{
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

    [appDelegate.detailNav popViewControllerAnimated:NO];
}

【问题讨论】:

  • 你能发布一些代码吗?你的描述似乎很好。
  • @walinaqvi,请发布一些代码,您很好地解释了您的问题。很可能是您在某个地方没有正确推动
  • 当然,这是我的代码,用于推送我正在使用的新视图控制器:[self.navigationController pushViewController:MyViewContrller animated:NO];弹出 Viewcontroller i;'m using:[self.navigationController popViewControllerAnimated:NO ];
  • @walinaqvi 请忽略帕万在回答中所说的一切。你不应该在应用程序委托中放置任何东西。这是一件非常糟糕的事情。请不要这样做。
  • @walinaqvi 同意fogmeister 的观点。另外,我看到您实际上已经找到了问题的原因 - 您可以回答自己的问题并接受它。

标签: ios objective-c ipad uiviewcontroller uinavigationcontroller


【解决方案1】:

我终于找到了解决方案,这是一个非常愚蠢的错误,我的 ViewController-3 是 UINavigationController 的委托。

当我试图将 viewController-2 弹出到 viewController-1 时,我的 UINavigationController 正在寻找它的委托方法 - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 在 vi​​ewController-3 中已经弹出。

我将 rootViewController 设置为 UINavigationController 的委托,现在它可以正常工作了。

【讨论】:

    猜你喜欢
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2013-07-25
    • 1970-01-01
    相关资源
    最近更新 更多