2013-09-25 54 views
5

Tôi đã có một vụ tai nạn:UIAlertView làm cho chương trình sụp đổ

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

Và tôi không thể tìm thấy một giải pháp trong 2 ngày. Và đây là mã:

[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

Chăm sóc để cho chúng ta thấy mã của bạn cho cảnh báo? –

+1

Điều này sẽ bị lỗi trong Xcode 4 và Xcode 3. – trojanfoe

+2

Tôi không nghĩ rằng thông báo lỗi có thể rõ ràng hơn nhiều. – trojanfoe

Trả lời

1

Vâng, tôi đã tìm thấy giải pháp và tôi chia sẻ với các bạn. Tôi đã cố gắng ghi đè chức năng dismissWithClickedButtonIndex và gửi buttonIndexes duy nhất như 9999 cho mỗi cảnh báo của tôi. Đó là,

- (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]; 
    } 
} 

và nếu tôi muốn hiển thị noticketAlert, tôi gọi phương pháp này như sau:

[alert dismissWithClickedButtonIndex:9999 animated:YES]; 
0

Nếu bạn có một nút tùy chỉnh chắc chắn rằng bạn thực hiện các phương pháp đại biểu:

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

nếu không tìm thấy bộ chọn này thì chương trình bị lỗi ..

8

Tôi gặp lỗi này khi trình bày một UIAlertView bình thường (không có công cụ ghi đè nút buồn cười). Nó bật ra rằng tôi đã trình bày nó hai lần trong kế nhanh chóng. Bản sửa lỗi trong trường hợp của tôi là xóa cuộc gọi trùng lặp không đúng.

Nếu bạn cần hiển thị hai chế độ xem cảnh báo gần cùng một thời điểm, và bạn gặp lỗi này, thì việc sửa lỗi hoạt động (và giải quyết chính thông báo lỗi) là chạy mã trên luồng chính:

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

Tôi đã kích hoạt lỗi này bằng cách cố gắng hiển thị cảnh báo từ chuỗi nền. Cố định như thế này:

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

Đối với những người tìm kiếm câu trả lời Swift 2 đến vấn đề này, tôi chạy vào một vấn đề tương tự và giải quyết nó bằng dung dịch @ Dave batton của

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