【发布时间】:2014-08-05 09:34:34
【问题描述】:
您好,我正在开发一个我应该去的应用程序:
- 从
UIViewController1 到UIViewController2 - 从
UIViewController2 到UIViewController3 - 从
UIViewController3 到UIViewController4 - 从
UIViewController4 回到UIViewController2
我正在使用UINavigationController。当我使用[self.navigationController pushViewController:VC2 animated:NO]; 和[self.navigationController popViewControllerAnimated:NO]; 时,一切正常。
但是当我使用来自UIViewController4 的[self.navigationController popToViewController:VC2 animated:NO]; 时,应用程序会终止说Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Tried to pop to a view controller that doesn't exist.'
以下是我如何弹出到UIViewController2 的代码
for (UIViewController *vc in self.navigationController.viewControllers) {
if ([vc isKindOfClass:[ViewController2 class]]) {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
ViewController2 *VC2 = [storyboard instantiateViewControllerWithIdentifier:@"ViewController2"];
[self.navigationController popToViewController:VC2 animated:NO];
}
}
当我打印导航数组时,它在堆栈中显示UIViewController2。
我已经从 Editor->embed in->Navigation Controller
UINavigationController
谁能告诉我为什么会这样?我试图搜索这个问题,但没有任何帮助
【问题讨论】:
-
我认为你的 UINavigationController 中没有 VC2 instacne。也许你有 2 个不同的 UIViewController2 实例?尝试调用 [[self.navigationController viewControllers] indexForObject:VC2];和 [VC isKindOfClass:[UIViewController2 class]] 在 for-each 循环中检查我是否正确。
-
您必须跳转到导航堆栈上的 UIViewController。您正在尝试弹出到新分配的导航控制器。
标签: ios uiviewcontroller uinavigationcontroller poptoviewcontroller