@tryブロックが機能しないのはなぜですか?アプリはクラッシュしましたが、@ tryブロックによってキャッチされるはずでした。
NSString* test = [NSString stringWithString:@"ss"];
@try {
[test characterAtIndex:6];
}
@catch (NSException * e) {
NSLog(@"Exception: %@", e);
}
@finally {
NSLog(@"finally");
}
これで問題が見つかりました。
obj_exception_throw
をブレークポイントから削除すると、これが解決しました。これで@try
ブロックにキャッチされ、@try
ブロックが見つからない場合はNSSetUncaughtExceptionHandler
がこれを処理します。
すべてが完璧に動作します:)
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
最後に条件
上記で貼り付けた正確なコードが正常に機能するため、それは別のものではないのですか?.
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
Objective-CはJavaではありません。 Objective-Cでは、例外と呼ばれています。例外!エラー処理には使用しないでください。彼らの提案ではありません。 characterAtIndexを使用する前に文字列の長さを確認するだけで、すべてがうまくいきます。