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"];
Также обратите внимание на регистр Нечувствительные имена.