当我们想pop到某个页面的时候,不正确的写法,会产生crash:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Tried to pop to a view controller that doesn't exist.'
navigationController.viewControllers维护的是一个VC的stack,pop操作只能是这个stack中的VC元素。
如果这么写是会有问题的:
SiteOrderViewController *vc = [[SiteOrderViewController alloc]init];
[self.navigationController popToViewController:vc animated:YES];
就算是stack里面有SiteOrderViewController的实例,也会crash,因为这个VC实例,并不是stack中的。
po self.navigationController.viewControllers
<__NSArrayI 0x60000005d580>(
<LoginViewController: 0x7f9c0b102cf0>,
<SiteWallViewController: 0x7f9c0b10ecc0>,
<SiteOrderViewController: 0x7f9c07701190>
)
正确的写法应该是这样:
for (UIViewController *controller in self.navigationController.viewControllers) {
if ([controller isKindOfClass:[SiteOrderViewController class]]) {
SiteOrderViewController *vc =(SiteOrderViewController *)controller;
[self.navigationController popToViewController:vc animated:YES];
}
}