UIAlertView使程序崩溃

时间:2013-09-25 12:52:02

标签: ios7 uialertview

我遇到了车祸:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIKeyboardTaskQueue performTask:] may only be called from the main thread.'

我找不到解决方案2天了。 这是代码:

[alert dismissWithClickedButtonIndex:0 animated:YES];
UIAlertView *noTicketAlert = [[UIAlertView alloc] initWithTitle:@"Aradığınız kriterlere uygun bilet bulunamadı!" message:nil delegate:self cancelButtonTitle:@"Tamam" otherButtonTitles: nil];
[noTicketAlert show];

5 个答案:

答案 0 :(得分:10)

我通过尝试从后台线程显示警报来触发此错误。修正如下:

dispatch_async(dispatch_get_main_queue(), ^{
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:...
    [alertView show];
});

答案 1 :(得分:8)

我在正常呈现UIAlertView时遇到此错误(没有有趣的按钮覆盖内容)。原来我快速连续两次呈现它。在我的情况下修复是删除错误的重复调用。

如果你确实需要在接近同一时间呈现两个警报视图,并且你得到这个错误,那么一个有效的修复程序(并解决错误消息本身)是在主线程上运行代码:

[[NSOperationQueue mainQueue] addOperationWithBlock:^
    {
    // Your code that presents the alert view(s)
    }];

答案 2 :(得分:1)

是的,我找到了解决方案,我和你们分享了。 我试图覆盖dismissWithClickedButtonIndex函数,并发送了唯一的buttonIndexes 比如我的每个提醒都有9999。 也就是说,

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
    [self viewWillDisappear:YES];
    if(buttonIndex == 9999) {
        noTicketAlert = [[UIAlertView alloc] initWithTitle:@"Aradığınız kriterlere uygun bilet bulunamadı!" message:nil delegate:self cancelButtonTitle:@"Tamam" otherButtonTitles: nil];
        [noTicketAlert show];
    }
}

如果我想显示noticketAlert,我将此方法称为:

[alert dismissWithClickedButtonIndex:9999 animated:YES];

答案 3 :(得分:0)

如果您有自定义按钮,请确保实现委托方法:

- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
{
    return YES;
}

如果找不到这个选择器那么程序会崩溃..

答案 4 :(得分:0)

对于那些寻找Swift 2这个问题的人来说,我遇到了类似的问题并用@Dave Batton的解决方案解决了它

dispatch_async(dispatch_get_main_queue(), {
    self.performSegueWithIdentifier("loginSegue", sender: self)
})