据我所知,似乎UINavigationController
用动画背靠背推入在 iOS7 上造成了死锁。
我最初在 iOS6 上遇到崩溃并想出了以下解决方案:
创建一个视图控制器数组以在初始推送后推送到导航控制器。因此,如果要推送三个视图控制器(A、B 和 C),则该数组将包含 B 和 C。
实现
UINavigationControllerDelegate
的navigationController:didShowViewController:animated:
在委托方法中,只需检查视图控制器数组中是否有更多元素。如果是这样,从其中取出第一个元素并将其推送到导航控制器中。所以本质上如果有 B 和 C 视图控制器要推送,
navigationController:didShowViewController:animated:
会被调用 3 次;每次从 A 开始推送视图控制器之后。显然,最后一次调用不会做任何事情,因为此时数组应该是空的。
请注意,这种方法在 iOS6 上运行良好。但是,这在 iOS7 中中断了。似乎当它尝试在第二次推送中设置动画时,应用程序冻结了。在深入挖掘之后,我想出了在委托实现中以以下方式推送第二个视图控制器的解决方案。
dispatch_async(dispatch_get_main_queue(), ^{
[navigationController pushViewController:viewController
animated:YES];
});
这似乎解决了这个问题,但我想知道是否有人经历过类似的事情并对到底发生了什么有更好的解释。