Ser*_*vio 4 exception-handling objective-c
借口我的愚蠢问题,我希望使用一个特定异常的捕获,NSInvalidArgumentException,所以,我有我的OSX项目中的下一个代码:
@尝试
{
...
} @catch(NSInvalidArgumentException*exception)
{
...
}
但xcode说我:"未知类型名称'NSInvalidArgumentException'",所以ii正在导入
导入"Foundation/Foundation.h"或
import"Foundation/NSException.h"
但没有任何事情发生,有人知道什么包或库是NSInvalidArgumentException?或者哪个是我的错误?或者是否必须使用超类NSException捕获所有异常?在开发人员文档中没有表明它是这样的.
最好的祝福.
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方法的标准编程检查.