我有一个通过GCD调度的线程。当线程完成时,我提出一个UIAlertView让用户知道线程是完整的。我在主线程上执行UIAlertView([NSThread mainThread])。
如果我留在View Controller中,则警报视图显示正常,当我按下[Ok]按钮时,它会消失。但是,如果我返回主视图控制器(从而从堆栈中弹出先前的视图控制器),单击[确定]后会收到上述错误消息。 AlertView正确显示并正确关闭。
我可以假设这与UIAlartView无关吗?问题可能是其他一些代码试图在alartview之后执行?即便如此,在执行该代码块之后,我也看不到任何内容。我想在这一点上,我只是想确认一下,如果AlertView正常工作,那么问题不在于此。
如果我可以将其简化为一小部分示例代码,我将在此处发布。
谢谢!
答案 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;
}