Objective-C(Mac)尝试捕获未捕获异常
以下是我的方法:Objective-C(Mac)尝试捕获未捕获异常,objective-c,macos,cocoa,Objective C,Macos,Cocoa,以下是我的方法: - (IBAction)calculateButton:(id)sender { NSInteger dividend = 0; NSInteger divisor = 0; @try { dividend = [dividendField integerValue]; divisor = [divisorField integerValue]; [quotientField setIntegerValu
- (IBAction)calculateButton:(id)sender {
NSInteger dividend = 0;
NSInteger divisor = 0;
@try {
dividend = [dividendField integerValue];
divisor = [divisorField integerValue];
[quotientField setIntegerValue: dividend / divisor]; //program crashes here
[remainderField setIntegerValue: dividend % divisor];
}
@catch (NSException *exception) {
NSAlert* alert = [[NSAlert alloc] init];
[alert setMessageText: @"Error"];
[alert setInformativeText: @"Invalid input!"];
[alert runModal];
}
}
我的理解是,它是一个通用的异常处理程序,所有其他异常都是从它继承的;所以问题是,为什么程序会崩溃而不是进入
@catch
块?我得到了一个EXC_算术
,据我所知,它仍然是一个例外。。。那么为什么@catch
没有捕获它呢?这是因为“异常”不是Objective-C异常,而是来自内核的异常/陷阱。对象中不处理被零除的情况,因此纯C规则在这里适用。这是因为“异常”不是Objective-C异常,而是内核的异常/陷阱。对象中不处理被零除的情况,因此这里应用纯C规则。这并不能直接回答您的问题,但通常在目标C中很少使用异常处理。这一特定错误是您应该使用测试的典型示例。但为什么很少使用异常处理?如果它是导致程序崩溃的原因,则需要对其进行处理。。。对吗?Objective-C/Cocoa中的异常通常意味着程序员错误,除以零是可以测试的。异常不是非常面向对象的,异常由调用者方法处理,并且不是以OOP方式处理的,只有对象表示异常them@ElectricCoffee在实际除法之前先测试零。因为当你除以零时,数学并没有定义一个结果,所以你可能想把它作为一个特例来处理。但整个问题是,我需要检查是否有人将文本而不是数字放入框中。。。被零除不是问题。这并不能直接回答您的问题,但通常情况下,异常处理很少在目标C中使用。这个特定错误是您应该使用测试的典型示例。但是为什么很少使用异常处理呢?如果它是导致程序崩溃的原因,则需要对其进行处理。。。对吗?Objective-C/Cocoa中的异常通常意味着程序员错误,除以零是可以测试的。异常不是非常面向对象的,异常由调用者方法处理,并且不是以OOP方式处理的,只有对象表示异常them@ElectricCoffee在实际除法之前先测试零。因为当你除以零时,数学并没有定义一个结果,所以你可能想把它作为一个特例来处理。但整个问题是,我需要检查是否有人将文本而不是数字放入框中。。。被零除不是问题