UIAlertView上的EXC_BAD_ACCESS

时间:2014-04-25 18:54:46

标签: ios multithreading uialertview

我有一个通过GCD调度的线程。当线程完成时,我提出一个UIAlertView让用户知道线程是完整的。我在主线程上执行UIAlertView([NSThread mainThread])。

如果我留在View Controller中,则警报视图显示正常,当我按下[Ok]按钮时,它会消失。但是,如果我返回主视图控制器(从而从堆栈中弹出先前的视图控制器),单击[确定]后会收到上述错误消息。 AlertView正确显示并正确关闭。

我可以假设这与UIAlartView无关吗?问题可能是其他一些代码试图在alartview之后执行?即便如此,在执行该代码块之后,我也看不到任何内容。我想在这一点上,我只是想确认一下,如果AlertView正常工作,那么问题不在于此。

如果我可以将其简化为一小部分示例代码,我将在此处发布。

谢谢!

2 个答案:

答案 0 :(得分:4)

您很可能将警报视图的delegate设置为self(视图控制器)。因此,如果视图控制器在警报视图之前被关闭,则警报视图会尝试联系其(现在重新分配的)代理。

只需将nil传递给提醒视图delegate,而不是self。这假设您实际上不需要处理“确定”按钮。

答案 1 :(得分:0)

要使用委托并避免使用EXC_BAD_ACCESS,您可以添加类似

的属性

@property (nonatomic, weak) UIAlertView *myAlertView;

到您的视图控制器,并为其分配警报视图。然后,在视图控制器的dealloc方法中添加

- (void)dealloc {
    // other dealloc code
    if (self == self.myAlertView.delegate) self.myAlertView.delegate = nil;
}