我正在尝试使用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回到它?
答案 0 :(得分:0)
我是否正确使用视图控制器层次结构?
如果是这样,您实际上正在尝试“回”到视图控制器,这是不存在的,因为您已经到达导航控制器堆栈的根视图控制器。在这种情况下,所有先前初始化的控制器都已从堆栈中弹出,您必须重新初始化并推送所需的视图控制器。
如果我遗漏了一些重要的观点,那么如果您在“退出”选项可用时描述您的实际视图控制器堆栈将会很有帮助。此外,如果您记录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