17

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

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

[UIImage imageNamed:@"myFileFromTheBlueFolder"];

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

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

4

3 回答 3

30

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"];
于 2014-05-30T06:34:17.737 回答
10

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

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

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

于 2012-07-16T07:44:12.743 回答
-10

写下图像的完整名称。

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

还要记住不区分大小写的名称。

于 2012-07-16T07:45:44.230 回答