我遇到了车祸:
*** 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];
答案 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)
})