我想尝试使用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'
代码不会从数据创建图像,但它仍然不会抛出异常或其他任何内容。有没有一种方法可以让我理解是否创建了图像。
答案 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];
}
}
然而,整个代码片段很容易被重写(并且应该),不需要异常处理。