我试图在另一个线程(主线程)中显示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];
}
为什么会出现错误的访问错误?
答案 0 :(得分:0)
您是否实施了UIAlertViewDelegate
方法?更重要的是,在警报期间,您所称的此对象是否在范围内?如果它被释放,您将收到一个例外。
顺便说一句,除非您在用户点按@"OK"
按钮时需要该应用执行某项操作,否则您将nil
传递给delegate
。如果您需要delegate
,请确保保留该对象。
答案 1 :(得分:-1)
我认为当你单击“确定”时它会变坏,因为uialertview不是在主线程中创建的,但你试图从主线程访问uialertview,当对话框出现时单击“确定”。我误解了首先提出问题,抱歉:D所以将整个代码放在gcd调用中可以解决这个问题。在主线程中实例化alertview,并在主线程中运行你的选择器。