UIImage imageNamed: не находит изображение в синей справочной папке Xcode

В моем проекте Xcode у меня есть синяя ссылка, в которой указывается папка с изображениями.

Преимущество синей папки в том, что мне не нужно добавлять файлы в Xcode вручную. Поэтому, когда я добавляю новое изображение в папку, оно автоматически появляется в Xcode, однако, когда я пытаюсь ссылаться на файл из кода, используя

[UIImage imageNamed:@"myFileFromTheBlueFolder"];

он не находит изображение, хотя папка верхнего уровня добавляется к цели.: - (

Должен ли я ссылаться на изображение по-разному, когда я прихожу из синей папки, что ИМХО победит цель создания такой папки вообще.

Ответ 1

Я предполагаю, что проблема заключается в том, что "синяя папка" (например, ссылка на папку вместо группы) копируется в ваши ресурсы приложения дословно. Другими словами, он не сглаживается, как обычно. Если вы проверите свой встроенный продукт, рядом со всеми вашими нормальными ресурсами, вы, вероятно, увидите папку, и все, что было в папке, все еще находится в папке.

Таким образом, +[UIImage imageNamed:] не может найти изображение, потому что оно не переписывается в подкаталоги. Вы можете использовать -[NSBundle pathForResource:ofType:inDirectory:] для получения пути к ресурсу и передать его на +[UIImage imageWithContentsOfFile:], но это отбрасывает оптимизацию памяти, которая имеет +imageNamed: (например, где он кэширует используемые изображения и удаляет неиспользуемые изображения).

В качестве альтернативы вы можете прекратить использовать ссылку на папку. Или вы можете удалить ссылку на папку со своей фазы сборки ресурсов и добавить фазу сборки оболочки script, которая вместо этого скопирует ее содержимое в ваш встроенный продукт.

Ответ 2

Кевин прав насчет оптимизаций памяти, которые +[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"];

Ответ 3

Введите полное имя изображения.

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

Также обратите внимание на регистр Нечувствительные имена.