如何捕获imageWithData抛出的异常:iPhone

时间:2012-01-26 15:26:22

标签: iphone exception uiimage

我想尝试使用NSdata创建图像。如果UIImage的imageWithData:方法可以成功创建它,我将遵循路径,但如果它无法创建我想要按照另一种方式。

这甚至可能吗?

我试过

    @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'

代码不会从数据创建图像,但它仍然不会抛出异常或其他任何内容。有没有一种方法可以让我理解是否创建了图像。

2 个答案:

答案 0 :(得分:2)

您收到错误,因为im仍然是nil,并且您不能将nil添加到数组中。

你可以这样做:

im = [UIImage imageWithData:data];

if(im == nil) {
    anotherData = doSomethingWithData(data)
    im = [UIImage imageWithData:anotherData];
}

if(im != nil)
    [self.questionList addObject:im];

答案 1 :(得分:0)

类似于上面的模式的实现将是重写finally块,如下所示:

@finally {
   NSLog(@"Final");
   if(im) {
       [self.questionList addObject:im];
   }
}

然而,整个代码片段很容易被重写(并且应该),不需要异常处理。