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在这种情况下不起作用......看起来我做错了...
答案 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。