objective-c中的特殊例外

Ser*_*vio 4 exception-handling objective-c

借口我的愚蠢问题,我希望使用一个特定异常的捕获,NSInvalidArgumentException,所以,我有我的OSX项目中的下一个代码:

@尝试

{

...

} @catch(NSInvalidArgumentException*exception)

{

...

}

但xcode说我:"未知类型名称'NSInvalidArgumentException'",所以ii正在导入

导入"Foundation/Foundation.h"或

import"Foundation/NSException.h"

但没有任何事情发生,有人知道什么包或库是NSInvalidArgumentException?或者哪个是我的错误?或者是否必须使用超类NSException捕获所有异常?在开发人员文档中没有表明它是这样的.

最好的祝福.

Rob*_*Rob 9

NSInvalidArgumentException不是例外类型.它是一个字符串,将在name属性中返回异常.所以,你应该捕获你的异常,并且name属性不匹配,你可以重新@throw解决你不会处理的异常,例如:

@try {
    // code that generates exception
}
@catch (NSException *exception) {
    if ([exception.name isEqualToString:NSInvalidArgumentException])
    { 
        // handle it
    }
    else
    {
        @throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅异常编程主题.

我必须承认,我同意CodaFi的关注,即这不适用于例外情况.在调用Cocoa方法之前进行防御性编程,验证参数要好得多,并且只是确保首先不生成异常.如果您参考使用Objective-C编程指南的" 处理错误"部分,则异常是针对"程序员错误"的,他们说:

您不应该使用try-catch块代替Objective-C方法的标准编程检查.