popToRootViewController之后viewWillAppear中的pushViewController失败

时间:2014-10-14 10:48:52

标签: ios objective-c uiviewcontroller

有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到A From C之后,A不能再推送到B. 和其他pushViewController:一切都无法正常工作,popViewControllerAnimated:也会导致崩溃。

注意。

试过了

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

,但它对我不起作用。

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

整天都在这个问题上挣扎,任何帮助都会受到赞赏!

1 个答案:

答案 0 :(得分:0)

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

"Warning: Attempting to push .... while a transition is in progress"

您需要调用导航控制器方法,使它们不会相互重叠。

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