我在启用iOS 6.0故事板上运行
我有一个链接到TableViewController的NavController。 这个TableView可以转换为AViewController或BViewController。
当我在A中时,我想回到根目录并使用以下行执行segue到B:
UINavigationController *nav = self.navigationController;
[nav popToRootViewControllerAnimated:YES];
[nav performSegueWithIdentifier:@"GoToB" sender:self];
我检查了故事板,GoToB确实存在并且从TableViewController链接到BViewController
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<NavMainViewController: 0xb921fa0>) has no segue with identifier 'GoToB''
我错过了什么?
答案 0 :(得分:2)
segue将附加到您弹出的视图控制器,而不是nav
,它是包含它的容器视图控制器。所以这会更接近:
UINavigationController *nav = self.navigationController;
[nav popToRootViewControllerAnimated:YES];
UIViewController *rootVC = [nav.viewControllers objectAtIndex:0];
[rootVC performSegueWithIdentifier:@"GoToB" sender:self];
但是,我认为这里的问题是pop动画会与segue发生冲突。使用弹出式弹出:动画:NO可能会修复它,但我认为从rootVC执行segue会更正确(并且对于动画更加健壮)。
rootVC将实现viewDidAppear,如下所示:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (!self.isBeingPresented && /* any other condition that makes you want this */) {
[self performSegueWithIdentifier:@"GoToB" sender:self];
}
}