@try - 在Objective-c中捕获块

时间:2010-07-29 14:36:30

标签: iphone objective-c try-catch-finally nsexception

为什么@try阻止工作? 它崩溃了应用程序,但它应该被@try块捕获。

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

 @try {
    [test characterAtIndex:6];

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

3 个答案:

答案 0 :(得分:121)

一切都很完美:)

 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

     

最后条件

答案 1 :(得分:74)

现在我发现了问题。

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

答案 2 :(得分:0)

Objective-C不是Java。在Objective-C中,异常被称为。例外!不要将它们用于错误处理。这不是他们的建议。 只需在使用characterAtIndex之前检查字符串的长度即可,一切都很好。...