197

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

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

 @try {
    [test characterAtIndex:6];

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

3 に答える 3

144

すべてが完璧に機能します:)

 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 の文字が見つかりません

最大インデックス: 3

最終条件

于 2012-11-29T02:23:59.307 に答える
78

今、私は問題を見つけました。

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

于 2010-07-30T08:47:08.947 に答える