2012-01-17 89 views
2

以下的UIAlertViewDelegate協議規定:UIAlertView中的委託方法alertViewCancel:不會被調用

// Called when we cancel a view (eg. the user clicks the Home button). This is not called when the user clicks the cancel button. 
// If not defined in the delegate, we simulate a click in the cancel button 
- (void)alertViewCancel:(UIAlertView *)alertView; 

不過,我有一個顯示UIAlertView,當我打到現在在模擬器主頁按鈕,該方法alertViewCancel:不會被調用。請注意,當我觸摸AlertView上的一個按鈕時,alertView:clickedButtonAtIndex:委託方法會被調用,以便代理正確連接。

這是蘋果方面的缺陷,還是我,或者是模擬器?

編輯:

我目前通過聽取UIApplicationWillResignActiveNotification通知,我做以下駁回AlertView解決此問題:

[self.currentAlert dismissWithClickedButtonIndex:-1 animated:NO]; 
[self.currentAlert release]; 
self.currentAlert = nil; 
+0

你正在做點clickButtonAtIndex會覆蓋alertViewCancel的任何調用嗎? – carbonbasednerd 2012-01-17 13:43:08

+0

您可以顯示創建警報視圖的代碼嗎? – rishi 2012-01-17 13:43:40

+0

@carbonbasednerd好問題,但是當我點擊HOME按鈕時,alertView:clickedButtonAtIndex:方法不會被調用。我通過聽'UIApplicationWillResignActiveNotification'通知來解決這個問題(我用這一點信息更新了我的帖子) – Besi 2012-01-17 13:47:43

回答

3

它被調用時,系統實際上CANCEL請求您的警報視圖。當應用程序進入後臺時,您的警報視圖不會被取消,除非您的應用程序被flotsam進程驅逐,當您再次成爲前臺時,警報視圖將再次彈出。我認爲,雖然我不太確定,但如果flotsam會殺死你的程序,你將會得到這個代表電話作爲拆解序列的一部分。

在這一點上,文檔可能有點誤導。它曾經是主頁按鈕按下取消警報的情況,但情況並非總是如此。

+0

好吧,我想我明白了。這意味着在「預先多任務設備」中,該方法可能會被調用,因爲'UIAlertView'確實會被取消,因此不會再顯示。但是這個「flotsam」是誰? :-) – Besi 2012-01-17 14:15:06

+1

flotsam是當系統需要更多內存時應用程序的系統進程。當設備上的內存壓力很高時,flotsam會選取一個後臺應用程序,併發送內存警告。如果應用程序沒有釋放足夠的內存,flotsam會將其關閉。 「看門狗」是一種殺死不響應應用程序的系統進程,這是一種親密的精神。這個名字是「flotsam and jetsam」中的一個雙關語,用於浮動的東西並沒有被使用。 – 2012-01-17 14:19:54

+0

+1:感謝您的洞察! – Besi 2012-01-17 14:39:10