2015-06-02 169 views
0

我已經多次使用UIAlertView沒有問題,但這次我不能讓它工作正常。 的(簡單)的代碼如下:UIAlertView延遲或不顯示

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    alert = [[UIAlertView alloc]initWithTitle:@"" 
             message:[NSString stringWithFormat: @"Reload data ?"] 
            delegate:self 
          cancelButtonTitle:@"Yes" 
          otherButtonTitles:@"Cancel", nil];  
    [alert show]; 
    NSLog(@"executed"); 
} 

如果我在TableView中的一排觸我有兩個不同的行爲:

  1. 的alertView一些(6/7)秒後示出
  2. alertView未顯示。在這種情況下,只要我觸摸屏幕上任何一個 點,就立即顯示警報。

在這兩種情況下,第一次觸摸後都會立即執行[警告顯示],因爲我在日誌屏幕中看到「已執行」。 警報之前和之後,應用程序沒有做任何其他事情。

任何幫助?

+1

我建議你運行的性能分析的項目(從Xcode的菜單:產品 - >配置文件),並選擇時間簡檔。當您等待該警報時,您的CPU使用情況如何?你是否在一個函數卡住了,阻塞主線程?這將阻止顯示警報(以及使您的整個應用程序無響應)。 –

回答

1

與此

[[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
     alert = [[UIAlertView alloc]initWithTitle:@"" 
            message:[NSString stringWithFormat: @"Reload data ?"] 
           delegate:self 
         cancelButtonTitle:@"Yes" 
         otherButtonTitles:@"Cancel", nil];  
     [alert show]; 
     NSLog(@"executed"); 
    }]; 
+0

很棒!你能解釋爲什麼我的代碼不工作(我用過幾次)? – Corrado

+0

我認爲iOS 7和8支持快速支持,不推薦使用UIAlertView,它不像以前那樣工作,主線程阻止警報視圖。 –

0

嘗試信不信由你,但UIAlertView其實是在iOS8上棄用。

這就是說,你仍然可以使用它。對於未來針對iOS8 +的項目,Apple建議您改用UIAlertViewController

這是使用UIAlertViewController打開應用程序的設置的例子:

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Go to settings" message:@"Do you wish to go to the application settings?" preferredStyle:UIAlertControllerStyleAlert]; ; 
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil]; 
UIAlertAction *settingsAction = [UIAlertAction actionWithTitle:@"Settings" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; 
}]; 
[alertController addAction:cancelAction]; 
[alertController addAction:settingsAction]; 

[self presentViewController:alertController animated:YES completion:nil]; 
+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),你會能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 – skrilled

+0

@skrilled你爲什麼認爲這不能回答這個問題?在我看來,這通過提供完全可以接受的替代方案來回答這個問題。 – Popeye

+0

*我查看了發佈的答案後,請查看對該帖子進行的大量編輯。我的評論是關於這個評論的原始狀態,它是StackOverflow在查看答案和問題時如何工作的自動部分。 – skrilled