web-dev-qa-db-ja.com

@try-Objective-cのcatchブロック

@tryブロックが機能しないのはなぜですか?アプリはクラッシュしましたが、@ tryブロックによってキャッチされるはずでした。

 NSString* test = [NSString stringWithString:@"ss"];

 @try {
    [test characterAtIndex:6];

 }
 @catch (NSException * e) {
    NSLog(@"Exception: %@", e);
 }
 @finally {
    NSLog(@"finally");
 }
182

これで問題が見つかりました。

obj_exception_throwをブレークポイントから削除すると、これが解決しました。これで@tryブロックにキャッチされ、@tryブロックが見つからない場合はNSSetUncaughtExceptionHandlerがこれを処理します。

74

すべてが完璧に動作します:)

 NSString *test = @"test";
 unichar a;
 int index = 5;

 @try {
    a = [test characterAtIndex:index];
 }
 @catch (NSException *exception) {
    NSLog(@"%@", exception.reason);
    NSLog(@"Char at index %d cannot be found", index);
    NSLog(@"Max index is: %lu", [test length] - 1);
 }
 @finally {
    NSLog(@"Finally condition");
 }

ログ:

[__NSCFConstantString characterAtIndex:]:範囲外の範囲またはインデックス

インデックス5のCharが見つかりません

最大インデックス:3

最後に条件

121
iTux

上記で貼り付けた正確なコードが正常に機能するため、それは別のものではないのですか?.

2010-07-29 16:45:57.677 test[93103:207] Exception: *** -[NSCFString characterAtIndex:]: Range or index out of bounds
2010-07-29 16:45:57.678 test[93103:207] finally
12
mbogh

Objective-CはJavaではありません。 Objective-Cでは、例外と呼ばれています。例外!エラー処理には使用しないでください。彼らの提案ではありません。 characterAtIndexを使用する前に文字列の長さを確認するだけで、すべてがうまくいきます。

0
Claus Bönnhoff