UIAlertView不解雇?

时间:2013-12-16 20:21:18

标签: ios iphone objective-c ios7 uialertview

我在UINavigation控制器中有一些ViewController子类。我已经在应用程序的其他地方成功使用了UIAlertViews,我知道如何设置委托并包含正确的委托方法等。

在带有UITableView的ViewController中,我使用UIRefreshControl实现了“pull to refresh”。我有一个单独的类来管理一些XML数据的下载和解析,如果出现连接错误,我会发布一个通知。包含表视图的视图控制器会观察此通知并运行我构建并显示警报的方法:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Connection Error" message:[[notification userInfo] objectForKey:@"error"] delegate:self cancelButtonTitle:@"Close" otherButtonTitles:nil];
alertView.alertViewStyle = UIAlertViewStyleDefault;
[alertView show]; 

警报显示正确,但cancelButton没有响应 - 无法解除警报!在VC的viewDidLoad方法中放置类似的代码(相同但没有通知的userinfo)会创建一个行为正常的警报。

刷新手势是否会占用第一响应者或其他什么?我试过[alertView becomeFirstResponder]。我很感激任何建议......

更新:包含截图...这是正确的信息吗? (由于缺乏声誉,无法嵌入此图片)http://i.stack.imgur.com/4CGqS.png

3 个答案:

答案 0 :(得分:3)

修改

看起来你有一个死锁或你的线程卡住了等待。您应该查看代码并查看导致此问题的原因。

导致OP更新的原始答案

确保警报显示在主线程上:

dispatch_async(dispatch_get_main_queue(), ^{
    //Open alert here
});

答案 1 :(得分:0)

这本身不是一个解决方案,但我可能会在您排除故障时尝试两件快速的事情:

1)对UIAlert中的一些文本进行硬编码,而不是传递通知对象。看看行为是否有任何变化。

2)尝试在警报中添加另一个按钮,并附带一个方法来捕获它。因此,您将看到委托是否正在收到任何按钮消息。

答案 2 :(得分:0)

尝试将标记添加到alertView

alertView.tag = 0;

然后在视图控制器中创建方法alertView:clickedButtonAtIndex:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{
    if (alertView.tag == 0) {
        [alertView dismissWithClickedButtonIndex:0 animated:YES];
    }
}