如何捕获imageWithData:iPhone引发的异常

如何捕获imageWithData:iPhone引发的异常,iphone,exception,uiimage,Iphone,Exception,Uiimage,我想尝试使用NSdata创建图像。如果UIImage的imageWithData:method可以成功创建它,我将遵循一条路径,但如果它无法创建,我希望遵循另一条路径 这可能吗 我试过了 @try { im = [UIImage imageWithData:data]; NSLog(@"Trying"); } @catch (NSException * e) { NSLog(@"Exception");

我想尝试使用NSdata创建图像。如果UIImage的imageWithData:method可以成功创建它,我将遵循一条路径,但如果它无法创建,我希望遵循另一条路径

这可能吗

我试过了

    @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的代码片段是一个完美的例子,可以在不使用异常的情况下重新编写。谢谢您的回答。在凯文的问题之后,我意识到我试图构建的图像是零,我只使用了“如果”块。