我试图从我的自定义框架中抛出异常。如果它被抛到外面,它运作良好。 但是如果它在块内,应用程序会在[异常加注]崩溃。
如何在目标C中创建具有抛出的完成处理程序/块。
typedef void (^ServerResponse) (id responseObject, BOOL requestSuccess, NSError* error);
- (void)getData:(NSUInteger*)id response:(ServerResponse)response
{
NSString* url = [NSString stringWithFormat:@"%@data/%@“,ServerUrl,[NSString stringWithFormat:@"%ld",(long)vid]];
…………..
………
if(statuscode == 200 && [response objectForKey:@“something”])
{
NSException* exception = [NSException exceptionWithName:@“Name” reason:@“Data id" userInfo:nil];
[exception raise];
}
}
答案 0 :(得分:2)
问题可能是您的块被异步调用。因此,在引发异常时,您可能已经退出了@try
- @catch
块。您可以通过添加记录某些消息的@finally
子句来确认这一点,并且您可能会在引发异常之前看到它被调用。但是如果同步调用该块,则@catch
块将成功捕获该异常。
另外,如果要在例程中报告错误,则应传递NSError
个对象,而不是像其他语言一样抛出异常。例外情况是您在开发阶段切除的编程错误,而不是用于在常规使用应用程序期间可能出现的情况下的控制流程。
请参阅Exception Programming Topics,其中包含:
重要提示:您应该保留使用异常进行编程或意外的运行时错误,例如越界收集访问,尝试改变不可变对象,发送无效消息以及丢失与窗口服务器的连接。在创建应用程序时而不是在运行时,通常会使用异常处理这些类型的错误。