iOS didFailWithError并调用dismissViewController导致错误

时间:2014-05-18 21:55:31

标签: ios objective-c nsurlconnection

所以我的设置非常简单:

控制器A. 控制器B

控制器控制器B的一个字节,它是一个模态显示。

当控制器B的viewDidLoad触发时,我会根据请求实例化NSURLConnection并立即启动。

如果没有网络连接,则会触发didFailWithError。

从这里开始,我调用dismissViewController,但是当我这样做时,我会收到:

"在演示或解雇过程中尝试从视图控制器中解除!"

可能导致此错误的原因是什么?

我在控制器B上也有一个按钮,点击它时也会执行dismissViewController,但它会正确执行。

这可能是竞争条件,其中控制器B一旦到达viewDidLoad就没有完成动画/显示,并且URL连接产生并立即失败?

如果是这种情况,解决这个问题的正确方法是什么?

感谢。

2 个答案:

答案 0 :(得分:1)

在视图控制器完全呈现之前,您无法解除它。如果您仍然在viewDidLoad,那肯定不会出现这种情况,我认为viewWillAppear中的情况大多不是这样。 viewDidAppear是最早可能的状态,您可以保证视图控制器的演示文稿已完成并可随时解除。

说得好......从UI的角度来看,尝试在后台启动NSURLConnection并且如果你有一个良好的网络连接,那么你提出了视图控制器B,如果没有,只是永远不会出现,而不是出现并立即解雇。

答案 1 :(得分:-1)

似乎是竞争条件。您可以尝试在failToLoad委托中执行此操作并查看吗?

//Goes into the failed delegate
dispatch_async(dispatch_get_main_queue(), ^{
    //dismiss the View Controller here??
});