Ios 在UIAlertView上执行错误访问
我有一个通过GCD发送的线程。当线程完成时,我提供一个UIAlertView,让用户知道线程已经完成。我在主线程([NSThread mainThread])上执行UIAlertView 如果我保持在视图控制器中,警报视图将显示良好,当我按下[Ok]按钮时,警报视图将消失。但是,如果我返回到主视图控制器(从而从堆栈中弹出先前的视图控制器),我会在单击[确定]后收到上述错误消息。AlertView正确显示并正确关闭 我是否可以假设这与UIAlartView无关,并且问题可能是在alartview之后尝试执行的其他代码?即使如此,我也看不到在那块代码之后将要执行的任何内容。我想在这一点上,我只是想确认,如果AlertView工作正常,那么问题不在于它 如果我能将其简化为一小段示例代码,我将在这里发布Ios 在UIAlertView上执行错误访问,ios,multithreading,uialertview,Ios,Multithreading,Uialertview,我有一个通过GCD发送的线程。当线程完成时,我提供一个UIAlertView,让用户知道线程已经完成。我在主线程([NSThread mainThread])上执行UIAlertView 如果我保持在视图控制器中,警报视图将显示良好,当我按下[Ok]按钮时,警报视图将消失。但是,如果我返回到主视图控制器(从而从堆栈中弹出先前的视图控制器),我会在单击[确定]后收到上述错误消息。AlertView正确显示并正确关闭 我是否可以假设这与UIAlartView无关,并且问题可能是在alartview之
谢谢 您很可能将警报视图的
委托
设置为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。然而,在许多情况下,例如我的应用程序,我们需要处理“确定”按钮,我们如何处理这个问题?