UIImage imageNamed:在蓝色引用的Xcode文件夹中找不到图像

时间:2012-07-16 07:35:43

标签: iphone ios xcode cocoa-touch

在我的Xcode项目中,我有一个蓝色引用的文件夹,它指向带有图像的文件夹。

蓝色文件夹的好处是我不必手动将文件添加到Xcode。 因此,当我向文件夹添加新图像时,它会自动显示在Xcode中,但是,当我尝试使用

从代码中引用文件时
[UIImage imageNamed:@"myFileFromTheBlueFolder"];

尽管顶级文件夹已添加到目标,但它找不到图像。 : - (

当我来自一个蓝色文件夹时,我是否必须以不同方式引用图像,这样恕我直言就会失去拥有这样一个文件夹的目的。

3 个答案:

答案 0 :(得分:26)

Kevin对于+[UIImage imageNamed:]提供的内存优化是正确的,但绝对可以访问蓝色文件夹(文件夹引用)中的图像。您所要做的就是将文件夹名称添加到图像名称中。例如:

您的资源组织如下:

Icons (blue folder / folder reference)
  |__camera.png
  |__checkmark.png
Shared (yellow folder / xcode group)
  |__back.png
  |__logo.png

您可以像这样访问图像:

[UIImage imageNamed:@"Icons/camera"];
[UIImage imageNamed:@"Icons/checkmark"];

[UIImage imageNamed:@"back"];
[UIImage imageNamed:@"logo"];

答案 1 :(得分:9)

我想问题是“蓝色文件夹”(例如文件夹引用,而不是组)正逐字复制到您的应用程序资源中。换句话说,它并不像资源那样被平铺。如果您检查构建的产品,在所有常规资源旁边,您可能会看到文件夹本身,文件夹中的所有内容仍在文件夹中。

因此,+[UIImage imageNamed:]找不到图像,因为它没有递归到子目录中。您可以使用-[NSBundle pathForResource:ofType:inDirectory:]获取资源的路径并将其传递给+[UIImage imageWithContentsOfFile:],但这会丢弃+imageNamed:具有的内存优化(例如,它缓存已使用的图像并丢弃未使用的图像)

或者,您可以停止使用文件夹引用。或者您可以从资源构建阶段删除文件夹引用,并添加一个shell脚本构建阶段,将其内容复制到您的构建产品中。

答案 2 :(得分:-10)

写下图像的完整名称。

[UIImage imageNamed:@"myFileFromTheBlueFolder.png"];

还要记住不敏感名称。