如果有一个类似
的代码@try
{
@throw [NSException new];
}
@catch (NSException ex)
{
NSLog(@"exception caught");
}
在这种情况下,代码不会转到@catch块,而是应用程序崩溃。我们应该如何在objective-c
中捕获@throw引发的异常抛出答案 0 :(得分:3)
[NSException new]
实例化null
类,因为它不包含任何有用的信息。它不生成NSException
实例,因此您的:
@catch (NSException *ex)
{
NSLog(@"exception caught");
}
没用。但是,如果您使用:
@catch (id exception)
{
}
你会抓住这个空对象。
摘自Handling Exceptions的官方文件:
您可以拥有一系列@catch错误处理块。每个街区 处理不同类型的异常对象。你应该订购这个 @catch块序列从最具体到最不具体 异常对象的类型(最不具体的类型是id)...
答案 1 :(得分:1)
您必须使用
初始化NSException @throw [NSException exceptionWithName:@"Exception!" reason:nil userInfo:nil];
或在Apple文档中的“创建和引发NSException对象”页面中列出的构造NSException的其他一些有效方法。 https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSException_Class/index.html#//apple_ref/occ/cl/NSException