UIImage的“imageNamed:”在iOS 8上可以使用,但在iOS 7上不行?

5

关于"imageNamed:"不起作用的问题,SO上已经有了几个答案,但没有包括我的特殊情况:

在iOS 7上,"imageNamed:"返回nil,但是相同的构建在iOS 8上工作正常。

显然,一切都已正确连接,因为它在iOS 8上可以工作,但对于大约2打图像,在iOS 7上它持续地返回nil。值得注意的是,这个问题出现前我将资源移动到了AssetCatalog中。是否有一些不寻常的行为需要考虑?

根据该网站上类似问题的回答,以下是一些详细信息:

  • 该问题出现在实际构建和模拟器中,两个版本都显示了在iOS 7 / 8上的不同行为。
  • 图像是PNG格式,并且Asset Catalog包含每个版本的1x、2x和3x版本。
  • 我确认拼写和大小写匹配(通过iOS 8的工作进一步确认)。

目前SO上的大多数答案都是针对完全无法工作的错误。有谁能帮忙解决仅适用于iOS 8的图像调用问题吗?


1
你能提供有关所讨论的图像名称和传递给“-imageNamed:”的字符串的更多信息吗? - Tim
问题在于你没有提供足够的信息来“重现”这个问题。当我在iOS 7/8中使用imageNamed:来加载资源目录中的图片时,它是有效的。请尝试创建一个小项目来展示这个问题,并将其发布在我们可以查看的地方。 - matt
还有:你怎么知道它是空的?哦,顺便问一下,你是否在iOS 8中使用大小类别进行某些操作? - matt
@AdamPro13 整个东西都不起作用了。对于一个包含1x、2x和3x版本的单个文件,“imageNamed:”返回nil - Nerrolken
@matt 当使用“imageNamed:”设置UIImage对象时,我在断点处进行了调试。在iOS 8上,到达下一行代码时该对象已经被设置,而在iOS 7上,该对象在此行代码之后为nil。并且,没有任何大小类。 - Nerrolken
显示剩余11条评论
2个回答

2

哦,原来解决方法是如果你在资源目录中的图像集名称中有文件后缀,iOS 7就会出错。我们在资源目录中有几个版本的每个文件,用于不同的用途,因此我的同事将它们命名为旧文件名,如下所示:

"RedBall.png - Small" (includes 25px, 50px, 75px)
"RedBall.png - Large" (includes 150px, 300px, 450px)
"BlueBall.png - Small"
"BlueBall.png - Large"

显然,iOS 8足够聪明,能够识别“RedBall.png - Small”是文件名,而iOS 7不知道当“.png”就在中间时该怎么办。

将文件重命名为...

"RedBall - Small"
"RedBall - Large"
"BlueBall - Small"
"BlueBall - Large"

看起来这个可以解决问题。


0

您可以尝试以下步骤:

  1. 清理项目(Cmd+Shift+K)并重新运行。

  2. 添加另一张图片(不是@2x,@3x),检查是否能正常工作。

  3. 创建一个新项目并检查UIImage imagedName 可以在iOS7/8上工作。

遇到一些问题时,我们不需要寻找根本原因,只需跳过它并继续 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接