2

我有一个很长的 if 语句来决定在UIImageView. 它们都是.png文件,我使用代码:

if (whatever) {
    image = [UIImage imageNamed: @"imageName.png"];
}

有谁知道检查程序是否可以找到图像的方法?这样如果程序中不存在图像,它可以显示错误图像或什么的?

4

3 回答 3

7
+[UIImage imageNamed:]

nil如果找不到相应的图像文件,将返回。所以只需检查一下:

UIImage *image = [UIImage imageNamed:@"foo.png"];
if (image == nil)
{
    [self displayErrorMessage];
}
于 2012-08-12T19:50:52.987 回答
3

最短的片段是

image = [UIImage imageNamed:@"imageName"] ? : [UIImage imageNamed:@"fallback_image"]

但是你真的想要这样的代码吗?

再次检查:

if (whatever) {
    image = [UIImage imageNamed: @"imageName.png"];
    if(image == nil) {
        image = [UIImage imageNamed: @"fallback_image"];
    }
}

它仍然可以短路,例如

if(! (image = [UIImage imageNamed: @"imageName.png"]) ) {
    ...
}

但你在这里玩弄可读性。

于 2012-08-12T19:52:32.440 回答
0

首先,我建议使用字典而不是 long if。您可以通过 键入每个图像名称whatever。如果whatever当前不是对象,则创建一个enum封装该信息并使用NSNumbers 将枚举值装箱的对象。

然后,您可以检查nil何时尝试检索图像。imageNamed:用于nil指示失败,因此:

if( !image ){
    // No image found
}
于 2012-08-12T19:53:17.147 回答