如何在nsobject类的主线程中显示uialertview

时间:2013-10-11 14:06:17

标签: ios objective-c uialertview

我试图在另一个线程(主线程)中显示UIAlertView。但它始终用于线程1 exc_bad_access(code = 1 address = 0x0)错误。

我使用了以下代码。

if ([urlData writeToFile:attachmentPath atomically:YES]) {
    UIAlertView *sucessAlrt = [[UIAlertView alloc] initWithTitle:gaAppName
                           message:@"File has been Downloaded successfully"
                          delegate:self
                 cancelButtonTitle:nil
                 otherButtonTitles:@"OK", nil];

   [sucessAlrt performSelectorOnMainThread:@selector(show) 
                                withObject:nil waitUntilDone:NO]; 
}  

为什么会出现错误的访问错误?

2 个答案:

答案 0 :(得分:0)

您是否实施了UIAlertViewDelegate方法?更重要的是,在警报期间,您所称的此对象是否在范围内?如果它被释放,您将收到一个例外。

顺便说一句,除非您在用户点按@"OK"按钮时需要该应用执行某项操作,否则您将nil传递给delegate。如果您需要delegate,请确保保留该对象。

答案 1 :(得分:-1)

我认为当你单击“确定”时它会变坏,因为uialertview不是在主线程中创建的,但你试图从主线程访问uialertview,当对话框出现时单击“确定”。我误解了首先提出问题,抱歉:D所以将整个代码放在gcd调用中可以解决这个问题。在主线程中实例化alertview,并在主线程中运行你的选择器。