pushViewController in viewWillAppear failed after popToRootV



有3个视图控制器,A,B,C,都是在故事板中设计的。

在所有pushViewController:控制器都来自[self.navigationController instantiateViewControllerWithIdentifier:@"A/B/C_Controller"];

在A_ViewController(根控制器(:

-(void)viewWillAppear
{
   [self.navigationController pushViewController:B_Controller animated:YES];
}

B_ViewController:

-(IBAction)someButtonClick
{
   [self.navigationController pushViewController:C_Controller animated:YES];
}

C_ViewController:

-(IBAction)someButtonClick
{
   [self.navigationController popToRootViewControllerAnimated:YES];
}

问题:A_viewController -> B_viewController -> C_viewController很好。

但是在 popToRootViewController 从 C 到 A 之后,A 不能再推送到 B 了。等pushViewController:都不起作用,popViewControllerAnimated:也会导致崩溃。

注意。

试过

// in A view
dispatch_async(dispatch_get_main_queue(),^{
    [self.navigationController pushViewController:B_viewController animated:YES];
 })

在这篇文章中,但它对我不起作用。

有谁知道视图控制器堆栈中会发生什么?

整天都在这个问题上挣扎,任何帮助将不胜感激!

当你从 C popToViewController时,将在动画之前调用 A 中的 viewWillAppear 方法。现在,此时,由于转换正在进行中,您可能会在调试器中收到某种警告,例如:

"Warning: Attempting to push .... while a transition is in progress"
您需要以不相互

重叠的方式调用导航控制器方法。

在这种情况下,在 A 的viewDidAppear方法中调用 pushViewController 会更好。

最新更新