1
-(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を表示するだけで、ユーザーが「Dismiss」ボタンを押すとalertViewが消えるはずです。それで全部です。とにかく、アラートビューは機能しません。例外が発生した場合、アラート ビューが表示されますが、閉じるボタンを押しても何も起こらず、プログラムはフリーズしたままです。

@catch ブロック内などで alertView を使用しているため、悪が発生しますか?

事前にサンクス。

4

2 に答える 2

1

@try の中で正確に何が例外をスローしているのでしょうか? Objective-C での例外処理は、一般的にエラー処理に対して嫌われています。Objective-C プログラミング言語のドキュメントには次のように書かれています。

Objective-C では、例外はリソースを大量に消費します。一般的なフロー制御、または単にエラーを示すために例外を使用しないでください。代わりに、メソッドまたは関数の戻り値を使用してエラーが発生したことを示し、エラー オブジェクトで問題に関する情報を提供する必要があります。

Exception Programming Topicsガイドにも同様の意見があります。

重要プログラミングや、範囲外のコレクション アクセス、不変オブジェクトの変更の試み、無効なメッセージの送信、ウィンドウ サーバーへの接続の切断などの予期しないランタイム エラーのために、例外の使用を予約する必要があります。通常、実行時ではなくアプリケーションの作成時に例外を除いて、この種のエラーに対処します。

Error Handling Programming Guideもよく読んでいます。

于 2012-07-07T23:55:25.080 に答える
0

メインスレッドで多くの描画処理を行う必要があります。アラート ビュー コードを独自のメソッドに移動し、@catch で次のように呼び出すと、答えが見つかる場合があります。

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

... myAlertMethod は、アラート コードを移動したメソッドです。

于 2012-07-08T00:19:24.523 に答える