Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C(Mac)尝试捕获未捕获异常_Objective C_Macos_Cocoa - Fatal编程技术网

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在实际除法之前先测试零。因为当你除以零时,数学并没有定义一个结果,所以你可能想把它作为一个特例来处理。但整个问题是,我需要检查是否有人将文本而不是数字放入框中。。。被零除不是问题