popToViewController无法正常工作“试图弹出到不存在的视图控制器”

时间:2013-06-16 19:28:40

标签: ios objective-c segue poptoviewcontroller

我正在尝试使用popToViewController,我不断收到错误“试图弹出到不存在的视图控制器”?

我在设置视图中,当用户点击“退出”时,我关闭设置VC并转回到调用unwind segue方法的mainView。在unwind segue方法中,我调用以下内容。

-(IBAction)endSettingsViaLogout:(UIStoryboardSegue *)segue {

//[self performSegueWithIdentifier:@"mainToLoginSegue" sender:self];

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
//[self.navigationController popViewControllerAnimated:YES];

DLog(@"User finished with search");
}

当调用poptoVC时,我得到“试图弹出到不存在的视图控制器”。

我NSLog self.navigationController.viewControllers,我可以看到VC的堆栈和我要弹出的那个在那里?

///更新//////

好的,这是我找到的。如果我的设置是一个常规的“推”segue然后代码工作,我会弹回到我想要的地方。如果我做了一个自定义的segue,来自屏幕的左侧,那么它就会停止工作。即使使用自定义segue,self.navigationcontroller.viewcontrollers也会在堆栈中显示它。那么为什么我不能回到它呢?或者我如何使用自定义segue回到它?

4 个答案:

答案 0 :(得分:0)

我是否正确使用视图控制器层次结构?

  • 在您的基础上,您已将UINavigationViewController设置为根视图控制器。
  • 然后推送了一个设置视图控制器。
  • 通过“退出”,设置视图控制器正在被回调到主视图控制器。

如果是这样,您实际上正在尝试“回”到视图控制器,这是不存在的,因为您已经到达导航控制器堆栈的根视图控制器。在这种情况下,所有先前初始化的控制器都已从堆栈中弹出,您必须重新初始化并推送所需的视图控制器。

如果我遗漏了一些重要的观点,那么如果您在“退出”选项可用时描述您的实际视图控制器堆栈将会很有帮助。此外,如果您记录self.navigationController.viewControllers数组,控制台上会打印出什么?

答案 1 :(得分:0)

好吧,基本上告诉objectatindex 1不存在:

要尝试的事情:

objectatindex:0

nslog(@"%d",[[self.navigationController.viewControllers]count]);//add it before the popline and see if it works

如果是topview控制器,请尝试以下操作:

[navigationController topViewController]而不是

答案 2 :(得分:0)

NSArray *viewControllers = [[self navigationController] viewControllers];

for( int i=0;i<[viewControllers count];i++)
{
    id obj=[viewControllers objectAtIndex:[viewControllers count]-i-1];
    if([obj isKindOfClass:[OrderCheckOutViewController class]]){

    [[self navigationController] popToViewController:obj animated:YES];
        return;
    }
}

答案 3 :(得分:0)

您可以使用该代码段在navigationController的堆栈中弹出targetVC的下一个viewController。

-3