【问题标题】:UIImage imageNamed: does not find image within blue referenced Xcode-folderUIImage imageNamed:在蓝色引用的 Xcode 文件夹中找不到图像
【发布时间】:2012-07-16 07:35:43
【问题描述】:

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

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

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

虽然顶级文件夹已添加到目标,但它没有找到图像。 :-(

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

【问题讨论】:

  • 添加显示图像的 Xcode 文件结构的屏幕截图
  • 你试过干净吗?似乎总是需要用蓝色文件夹清理很多
  • “蓝色”文件夹是一个目录。您可能能够(或必须)将该路径包含在 imageNamed 参数中。否则,您将不得不遵循 Kevin Ballard 的建议。您还需要文件的扩展名。

标签: iphone ios xcode cocoa-touch


【解决方案1】:

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"];

【讨论】:

  • UIImage(named: "Cats/(imageName).png")
【解决方案2】:

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

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

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

【讨论】:

  • 非常感谢您的解释。我想我会坚持使用 Groups。我也许可以设法使用 AppleScript 等将文件自动添加到组中。这样我就可以从蓝色文件夹中获得好处。
  • @Besi:为什么要在 Xcode 之外的项目中添加文件?直接使用 Xcode 教任何添加文件的人可能会更简单。
  • 我必须使用文件夹引用,因为我的一些图像资源具有相同的名称。所以在我的情况下,我怎样才能实现/维护内存优化
  • @Kailash:使用NSCache 来保存您的图像,先在那里查找它们,然后使用+[UIImage imageWithContentsOfFile:] 加载它们,前提是它们尚未在缓存中。
  • 您所要做的就是将蓝色文件夹的(文件夹引用)名称添加到图像的路径中。有关示例,请参阅我的答案。
【解决方案3】:

写下图片的完整名称。

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

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

【讨论】:

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