Ios 在UIAlertView上执行错误访问

Ios 在UIAlertView上执行错误访问,ios,multithreading,uialertview,Ios,Multithreading,Uialertview,我有一个通过GCD发送的线程。当线程完成时,我提供一个UIAlertView,让用户知道线程已经完成。我在主线程([NSThread mainThread])上执行UIAlertView 如果我保持在视图控制器中,警报视图将显示良好,当我按下[Ok]按钮时,警报视图将消失。但是,如果我返回到主视图控制器(从而从堆栈中弹出先前的视图控制器),我会在单击[确定]后收到上述错误消息。AlertView正确显示并正确关闭 我是否可以假设这与UIAlartView无关,并且问题可能是在alartview之

我有一个通过GCD发送的线程。当线程完成时,我提供一个UIAlertView,让用户知道线程已经完成。我在主线程([NSThread mainThread])上执行UIAlertView

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

我是否可以假设这与UIAlartView无关,并且问题可能是在alartview之后尝试执行的其他代码?即使如此,我也看不到在那块代码之后将要执行的任何内容。我想在这一点上,我只是想确认,如果AlertView工作正常,那么问题不在于它

如果我能将其简化为一小段示例代码,我将在这里发布


谢谢

您很可能将警报视图的
委托
设置为
self
(视图控制器)。因此,如果在警报视图之前解除视图控制器,警报视图将尝试联系其(现在已重新分配)代理


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

很可能您将警报视图的
委托设置为
自我
(视图控制器)。因此,如果在警报视图之前解除视图控制器,警报视图将尝试联系其(现在已重新分配)代理


只需将
nil
传递到警报视图
delegate
,而不是
self
。这假设您实际上不需要处理OK按钮。

要使用委托并避免EXC\u BAD\u访问,您可以添加如下属性

@属性(非原子,弱)UIAlertView*myAlertView

,并将警报视图指定给它。然后,在视图控制器的dealloc方法中添加

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

要使用委托并避免EXC_BAD_访问,可以添加如下属性

@属性(非原子,弱)UIAlertView*myAlertView

,并将警报视图指定给它。然后,在视图控制器的dealloc方法中添加

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

就这样!谢谢你的帮助。有时候答案很简单,但实际上是看不见的!谢谢@mmaddy。然而,在很多情况下,例如我的应用程序,我们需要处理“确定”按钮,我们如何处理这个问题?就是这样!谢谢你的帮助。有时候答案很简单,但实际上是看不见的!谢谢@mmaddy。然而,在许多情况下,例如我的应用程序,我们需要处理“确定”按钮,我们如何处理这个问题?