0

我在視圖控制器的方法中遇到了一些UIAlertView I實例的問題。此UIViewController從另一UIViewController呈現,並且在某一點我顯示來自一個實例方法的UIAlertView這種方式:iOS應用程序在警報視圖解鎖時崩潰

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Upload Error", @"") 
                message:NSLocalizedString(@"It was not possible to complete the upload, do you want to try again?", @"") 
                delegate:self 
              cancelButtonTitle:NSLocalizedString(@"Cancel", @"") 
              otherButtonTitles:NSLocalizedString(@"Accept", @""), nil]; 

[alertView show]; 

我能之前或在此警報視圖中示出了時間駁回呈現UIViewController,是什麼原因導致當呈現的視圖控制器不在屏幕上時顯示這樣的警報視圖,因此警報視圖顯示在呈現視圖控制器的頂部。然後,當點擊一個警報視圖的按鈕,應用程序崩潰,我猜是因爲它的委託是提供的視圖控制器,它不存在。我怎麼能避免這種情況?

謝謝!

+0

理想情況下,當您確定取消某種提醒時,代表應該出席。在你的情況下,視圖控制器,因爲你給用戶選擇失敗時再試一次。因此委託需要重新啓動操作。 – Amar

回答

0

要麼在您的視圖控制器即將被解散之前通過調用dismissWithClickedButtonIndex:animated:來關閉警報視圖,可能在視圖控制器的viewWillDisappear中:或適當的方法。或者,如果您希望即使在呈現的視圖控制器消失後警報視圖仍保留在屏幕上,請將呈現視圖控制器引用傳遞給呈現的視圖控制器,並將alertView的委託設置爲呈現視圖控制器。

+0

所以,我需要讓'UIViewController'對警報視圖進行引用......或者有沒有辦法檢測視圖控制器即將卸載/消失時是否顯示警報視圖? – AppsDev

+0

如果您呈現的視圖控制器是vc1,並且呈現的視圖控制器是顯示警報視圖的vc2,則將vc1的引用傳遞給vc2。然後將alert view delegate設置爲vc1。 –

+0

如果用戶點擊「接受」並更新v2的視圖,我需要執行一些操作,所以我需要v2作爲委託,所以我需要或者在解除v2前「殺死」警報, v2如果警示正在顯示,則停止作爲解散之前的代表,是嗎? – AppsDev

0

答案取決於你想要達到的行爲。

首先檢查UIAlertView documentation

委託:接收方的委託或零,如果沒有一個代表。

  • 如果你不想做取決於用戶 行動「特別的東西」,傳遞null。
  • 如果您想根據 做「特別的事情」,用戶操作將創建一個特殊的委託來處理用戶操作並保持該操作處於活動狀態。
相關問題