2013-12-16 48 views
1

我有一個UINavigation控制器內的幾個ViewController子類。我已經在應用程序中的其他地方成功使用了UIAlertViews,並且我知道如何設置委託幷包含正確的委託方法等。UIAlertView不退出?

在帶有UITableView的ViewController中,我實現了一個'pull to refresh'UIRefreshControl 。我有一個單獨的類來管理一些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方法中添加類似的代碼(相同但沒有通知的用戶信息)會創建一個正常行爲的警報。

刷新手勢是否搶先響應者或什麼?我試過[alertView becomeFirstResponder]。我會很感激任何意見...

更新:截圖包括...這是正確的信息? (不能嵌入此圖像缺乏信譽)http://i.stack.imgur.com/4CGqS.png

+1

第一響應者不影響觸摸事件。你可能顯示來自後臺線程的警報? –

+0

此代碼在哪裏調用?代表方法在哪裏? – gurooj

+0

它不會從後臺顯示,雖然結構可能有點奇怪:UIRefreshControl告訴單例數據存儲類有另一個類來發出url請求。通知由該類的連接發佈:didFailWithError:方法。 – scsiduck

回答

3

編輯

好像你有一個死鎖或你的線程被卡住等待。你應該看看你的代碼,看看是什麼原因造成的。

原來的答覆導致在OP更新

確保警報在主線程顯示:

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

謝謝 - 有趣的結果,警報現在不顯示。這是否表明其他進程正在佔用主線程? – scsiduck

+0

@scsiduck似乎是的,是的。在調試器中,點擊暫停(在用戶界面被卡住後)併發布您在那裏看到的屏幕截圖。 –

+0

@scsiduck添加圖像的URL到原來的帖子 – scsiduck

0

這不是一個解決方案本身,而是爲您解決我可能會嘗試兩個快速件事:

1)硬編碼在UIAlert一些文字,而不是傳入通知對象。看看行爲是否有任何改變。

2)嘗試添加另一個按鈕的警報和附帶的方法來捕捉它。所以你會看到代理是否獲得了ny按鈕消息。

+0

感謝您的建議......對'消息'進行硬編碼並沒有效果,並且委託消息似乎永遠不會被調用。我驗證了在viewDidLoad方法中使用相同的代碼會顯示一條可以解散的警報,並調用委託消息。 – scsiduck

+0

即使未調用委託方法,按鈕是否顯示爲「按下」?如同,在警戒線前面可能會有東西看不到你的觸覺? – Fluffhead

+0

按鈕似乎沒有按下,好主意。除了警報之外,我不會以編程方式創建任何視圖。其他一切只是在故事板中創建的。 – scsiduck

0

嘗試添加標籤的alertView

alertView.tag = 0; 

然後在視圖控制器中創建方法alertView:clickedButtonAtIndex:

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

如果只有一個警報視圖,標記的要點是什麼? –

+0

除了提供區分多個警報視圖的方法外,沒有其他意義。看到OP只有一個警報,他們可能會忘記標籤,並運行[alertView dismissWithClickedButtonIndex:0 animated:YES];在委託方法內部。 請參閱[Apple的UIAlertViewDelegate文檔](https://developer.apple.com/library/ios/documentation/uikit/reference/UIAlertViewDelegate_Protocol/UIAlertViewDelegate/UIAlertViewDelegate.html)瞭解更多關於需要我實施的委託方法的信息與自定義按鈕。 – timgcarlson

+0

@timgcarlson不幸的是,仍然沒有響應 – scsiduck