试着......抓不去工作

时间:2010-09-10 10:42:01

标签: objective-c exception-handling

int main (int argc, const char * argv[]) { <br>

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

int a1,b1,c1;
@try {      
    NSLog(@"Enter numerator: ");
    scanf("%i",&a1);
    NSLog(@"Enter denomenator: ");
    scanf("%i",&b1);
    c1 = a1/b1;
    NSLog(@"%i",c1);
}
@catch (NSException * e) {
    NSLog([e name]);
    NSLog([e description]);
    NSLog([e reason]);
}
@finally {
    NSLog(@"inside finally block");
}
[pool drain]; 

return 0; 

}   

如果我输入a1 = 10的值,b1 = 0,那么应该生成异常,因此catch块中的语句将被执行。但事实并非如此。程序崩溃了。 Try ..Catch在这种情况下不起作用......看起来我做错了...

3 个答案:

答案 0 :(得分:3)

try / catch仅适用于抛出的Obj-C异常。它们是相当高级的结构。这可能与Java try / catch块不同,它们几乎可以捕获所有内容。

答案 1 :(得分:2)

看起来OP只想要一个try-catch-finally的例子。 万一其他人需要它,这是一个基本的例子 与ARC合作:

#import <Foundation/Foundation.h>

int main (int argc, char *argv[]) {
    @autoreleasepool {
        @try {
            @throw ([NSException exceptionWithName:@"MyException"
                                            reason:@"Just testing"
                                          userInfo:nil]);
        }
        @catch (NSException *ex) {
            NSLog(@"Exception caught: %@", ex);
        }
        @finally {
            NSLog(@"Finally is executed whether there's an exception or not");
        }
    }
    return 0;
}

答案 2 :(得分:1)

您正在看到由C代码(c1 = a1 / b1)引起的浮点异常。 这不包含在NSException中。

如果要浏览catch块,可以用

替换FPE代码
[[NSString string] setValue:@"" forKeyPath:@"KP"];

将触发NSUnknownKeyException。