在我的Xcode项目中,我有一个蓝色引用的文件夹,它指向带有图像的文件夹。
蓝色文件夹的好处是我不必手动将文件添加到Xcode。 因此,当我向文件夹添加新图像时,它会自动显示在Xcode中,但是,当我尝试使用
从代码中引用文件时[UIImage imageNamed:@"myFileFromTheBlueFolder"];
尽管顶级文件夹已添加到目标,但它找不到图像。 : - (
当我来自一个蓝色文件夹时,我是否必须以不同方式引用图像,这样恕我直言就会失去拥有这样一个文件夹的目的。
答案 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"];
还要记住不敏感名称。