如何捕获imageWithData:iPhone引发的异常
我想尝试使用NSdata创建图像。如果UIImage的imageWithData:method可以成功创建它,我将遵循一条路径,但如果它无法创建,我希望遵循另一条路径 这可能吗 我试过了如何捕获imageWithData:iPhone引发的异常,iphone,exception,uiimage,Iphone,Exception,Uiimage,我想尝试使用NSdata创建图像。如果UIImage的imageWithData:method可以成功创建它,我将遵循一条路径,但如果它无法创建,我希望遵循另一条路径 这可能吗 我试过了 @try { im = [UIImage imageWithData:data]; NSLog(@"Trying"); } @catch (NSException * e) { NSLog(@"Exception");
@try {
im = [UIImage imageWithData:data];
NSLog(@"Trying");
}
@catch (NSException * e) {
NSLog(@"Exception");
anotherData = doSomethingWithData(data)
im = [UIImage imageWithData:anotherData];
}
@finally {
NSLog(@"Final");
[self.questionList addObject:im];
}
但它会导致应用程序崩溃
如何捕获此异常而不导致应用程序崩溃
例外情况如下:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0'
代码不会从数据创建图像,但仍然不会抛出异常或任何与之相关的内容。是否有一种方法可以让我了解图像是否已创建。您会得到错误,因为
im
仍然是nil
,并且不允许将nil
添加到数组中
你可以这样做:
im = [UIImage imageWithData:data];
if(im == nil) {
anotherData = doSomethingWithData(data)
im = [UIImage imageWithData:anotherData];
}
if(im != nil)
[self.questionList addObject:im];
类似于上述模式的实现是重新编写finally块,如下所示:
@finally {
NSLog(@"Final");
if(im) {
[self.questionList addObject:im];
}
}
然而,整个代码段可以很容易地重新编写(并且应该)以不需要异常处理 抛出的错误是什么?无法捕获我recon
NSInvalidArgumentException
。@harakiri的代码片段是一个完美的例子,可以在不使用异常的情况下重新编写。谢谢您的回答。在凯文的问题之后,我意识到我试图构建的图像是零,我只使用了“如果”块。