2012-08-12 59 views
2

我有一个很长的if语句来决定在UIImageView中显示的图像。他们都是.png文件,我用的是代码:检查+ [UIImage imageNamed:]是否发现图像

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

有谁知道的方法来检查,看是否该程序可以找到的形象呢?所以如果图像不存在于程序中,它可以显示错误图像或其他东西?

+1

图像应该存储在文件上?如果是的话,这不是检查的方式,'[UIImage imageNamed]'应该只用于捆绑文件。 – 2012-08-12 19:51:00

+0

非常好的评论!但是,仍然有可能出现这种情况,因为您没有正确打包该应用程序,因此它实际上包含了缺少的图像;) – Farcaller 2012-08-12 19:55:38

回答

6
+[UIImage imageNamed:] 

将返回nil如果它找不到相应的图像文件。因此,只要检查是:

UIImage *image = [UIImage imageNamed:@"foo.png"]; 
if (image == nil) 
{ 
    [self displayErrorMessage]; 
} 
+0

太棒了,非常感谢! – user1530460 2012-08-12 19:55:57

+0

@ W'rkncacnter是的,对不起,我忽略了它。这绝对是一种阶级方法。 – 2012-08-12 20:10:02

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"])) { 
    ... 
} 

,但你与可读性这里玩弄。

0

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

然后,当您尝试检索图像时,您可以检查nilimageNamed:使用nil来指示故障,所以:

if(!image){ 
    // No image found 
}