我有一个很长的if语句来决定在UIImageView
中显示的图像。他们都是.png文件,我用的是代码:检查+ [UIImage imageNamed:]是否发现图像
if (whatever) {
image = [UIImage imageNamed: @"imageName.png"];
}
有谁知道的方法来检查,看是否该程序可以找到的形象呢?所以如果图像不存在于程序中,它可以显示错误图像或其他东西?
我有一个很长的if语句来决定在UIImageView
中显示的图像。他们都是.png文件,我用的是代码:检查+ [UIImage imageNamed:]是否发现图像
if (whatever) {
image = [UIImage imageNamed: @"imageName.png"];
}
有谁知道的方法来检查,看是否该程序可以找到的形象呢?所以如果图像不存在于程序中,它可以显示错误图像或其他东西?
+[UIImage imageNamed:]
将返回nil
如果它找不到相应的图像文件。因此,只要检查是:
UIImage *image = [UIImage imageNamed:@"foo.png"];
if (image == nil)
{
[self displayErrorMessage];
}
太棒了,非常感谢! – user1530460 2012-08-12 19:55:57
@ W'rkncacnter是的,对不起,我忽略了它。这绝对是一种阶级方法。 – 2012-08-12 20:10:02
最短的片断将
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"])) {
...
}
,但你与可读性这里玩弄。
首先,我建议使用字典而不是长的if
。您可以通过whatever
键入每个图像名称。如果whatever
当前不是对象,则创建一个enum
,它将封装该信息并使用NSNumber
s来框出enum的值。
然后,当您尝试检索图像时,您可以检查nil
。 imageNamed:
使用nil
来指示故障,所以:
if(!image){
// No image found
}
图像应该存储在文件上?如果是的话,这不是检查的方式,'[UIImage imageNamed]'应该只用于捆绑文件。 – 2012-08-12 19:51:00
非常好的评论!但是,仍然有可能出现这种情况,因为您没有正确打包该应用程序,因此它实际上包含了缺少的图像;) – Farcaller 2012-08-12 19:55:38