【问题标题】:Check whether +[UIImage imageNamed:] found an image检查 +[UIImage imageNamed:] 是否找到图像
【发布时间】:2012-08-12 19:48:12
【问题描述】:

我有一个很长的 if 语句来决定在 UIImageView 中显示什么图像。都是.png文件,我用的是代码:

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

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

【问题讨论】:

  • 图片要存档吗?如果是,这不是检查的方式,[UIImage imageNamed] 应该只用于捆绑文件。
  • 非常好的评论!但是,在某些情况下,您可能无法正确打包应用程序,因此实际上缺少捆绑的图像;)

标签: objective-c cocoa-touch uiimage


【解决方案1】:
+[UIImage imageNamed:]

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

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

【讨论】:

  • @W'rkncacnter 是的,抱歉,我忽略了它。这绝对是一个类方法。
【解决方案2】:

最短的 sn-p 是

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

但你在这里玩弄可读性。

【讨论】:

    【解决方案3】:

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

    然后,您可以在尝试检索图像时检查nilimageNamed: 使用nil 表示失败,所以:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 2023-03-11
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      相关资源
      最近更新 更多