Objective-c中的@try – catch块

为什么不@try块工作? 它崩溃的应用程序,但它应该是由@try块捕获。

NSString* test = [NSString stringWithString:@"ss"]; @try { [test characterAtIndex:6]; } @catch (NSException * e) { NSLog(@"Exception: %@", e); } @finally { NSLog(@"finally"); } 

所有的工作完美:)

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

日志:

[__NSCFConstantString characterAtIndex:]:范围或索引超出范围

在索引5的字符不能被find

最大指数是:3

现在我发现了这个问题。

从我的断点删除obj_exception_throw解决了这个问题。 现在它被@try块捕获,而且,如果@try块丢失, NSSetUncaughtExceptionHandler将处理这个。

你确定它不是别的,因为你上面粘贴的确切代码工作正常。

 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