簡體   English   中英

iOS 5,ARC:UIAlertView在@catch塊中不起作用

[英]iOS 5, ARC: UIAlertView doesn't work in @catch block

-(IBAction)showCountryInfo:(id)sender
{
@try 
{
    CountryProperties *countryProperties=[self.storyboard instantiateViewControllerWithIdentifier:@"Culture"];
    countryProperties.countryID=self.countryID;
    countryProperties.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self.navigationController presentModalViewController:countryProperties animated:YES];
}
@catch (NSException *exception) 
{
    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Sorry" message:@"Module under revision" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil, nil];
    [alert show];
} 
}

我確實希望此代碼僅顯示一個alertView,並且在用戶按下“關閉”按鈕后,alertView應該消失。 就這樣。 無論如何,警報視圖不起作用。 如果確實發生異常,則會顯示警報視圖,但是當我按下關閉按鈕時,什么也沒有發生,並且程序仍然凍結。

是因為我在@catch塊之內使用了alertView還是類似的東西發生了邪惡嗎?

提前感謝。

@try內部到底是什么引發異常? 對於錯誤處理,通常不贊成使用Objective-C中的異常處理。 Objective-C編程語言文檔說:

在Objective-C中,異常會占用大量資源。 您不應將異常用於一般的流控制,或僅用於表示錯誤。 相反,您應該使用方法或函數的返回值來指示已發生錯誤,並在錯誤對象中提供有關問題的信息。

異常編程主題”指南具有類似的觀點:

重要說明:您應該保留對編程的異常使用或意外的運行時錯誤,例如越界集合訪問,嘗試使不可變對象發生突變,發送無效消息以及與窗口服務器的連接斷開。 通常,在創建應用程序時(而不是在運行時)會處理這類帶有異常的錯誤。

錯誤處理編程指南》也很不錯。

在主線程上必須進行許多繪圖操作。 如果將警報視圖代碼移至其自己的方法,然后在@catch中調用,則可能會找到答案:

[self performSelectorOnMainThread:@selector(myAlertMethod) withObject:nil waitUntilDone:NO];

...其中myAlertMethod是將警報代碼移至的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM