Изображения, не отображаемые в iOS 7.1 с XCode 6/Swift
У меня есть код ObjC:
[self.myButton setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@-button", self.myObject.name]]
forState:UIControlStateNormal];
Это отлично работает с этими комбинациями:
- XCode 5, iOS 7.1
- XCode 6, iOS 7.1
- XCode 6, iOS 8
Но когда я переношу один класс проекта в Swift - класс, который не связан ни с чем, что происходит в этом коде, - изображения не отображаются в XCode 6 для iOS 7.1. Он работает с XCode 6 и iOS 8.
Я закончил перенос всего проекта на Swift, так что теперь код выглядит так:
self.myButton.setBackgroundImage(
UIImage(named:self.myObject.name + "-button"),
forState: UIControlState.Normal
)
И это все еще несчастливо на iOS 7.1. Все еще нет изображений. (Однако пользовательский значок работает.) Да, я знаю, что это просто бета-версия программного обеспечения, и это, вероятно, просто ошибка...? Но мне просто интересно, есть ли у кого-нибудь решение или проницательность.
Я только начал использовать XCode и ObjC около недели назад (сюрприз! ObjC теперь устарел!), поэтому может быть, что я что-то не хватает, но поскольку он работает в ObjC, а в Swift + iOS8, похоже, это, вероятно, ошибка.
Ответы
Ответ 1
Мне удалось преодолеть это с помощью не используя Библиотеки объектов для хранения моих изображений.
Добавьте свои изображения в проект, используя "имя старого стиля", например Image.png и [email protected], затем загрузите их без каких-либо расширений в имени файла, например:
let myImage = UIImage(named:"Image")
Ответ 2
Исправлено в XCode 6 beta 2
Изображения из каталогов активов в проектах с минимальной целью развертывания iOS 7 или OS X 10.9 будут доступны при работе на iOS 8 и OS X 10.10, а теперь также iOS 7 и OS X 10,9. (17029658)
релиз xcode 6 beta 2 примечания
Ответ 3
Для меня это было потому, что я неожиданно добавлял изображение jpg в Image Assets. Просто сохранил его как png и все хорошо работает
Ответ 4
Думаю, вы тестируете его на симуляторе. Убедитесь, что желаемое изображение скопировано в пакет 7.1. Для этого проверьте этап сборки copy resources bundle
или проверьте пакеты вручную для разных симуляторов в ~/Library/Application Support/iPhone Simulator/
.
Ответ 5
@o KB o указывает здесь, что Заметки о выпуске бета-версии Xcode6 упоминают, что пакеты xcassets
не поддерживаются для iOS7. Кроме того, мне было удивительно сложно избавиться от пакетов активов в вашем проекте. Это может привести к именованию коллизий, если ваши изображения имеют то же имя, что и изображения, ранее находившиеся в комплекте (вам, вероятно, нужны одинаковые имена, поэтому вам не нужно переименовывать ваши изображения везде в коде /IB ).
Здесь обходной путь:
- Скопируйте каждое изображение из вашего набора изображений
.xcassets
в новый каталог (позвоните ему Images/
). См. Ниже script, чтобы сделать это проще.
- Удалите пакет
.xcassets
. (удивительно, что его удаление из проекта недостаточно. В моем тестировании, если пакет .xcassets
был где-то в том же каталоге, что и проект Xcode или связанные источники, он будет скопирован. В качестве альтернативы вы можете удалить .xcassets
)
- Добавьте все ваши файлы изображений в проект Xcode.
- Очистить (cmd + shift + k)
- Удалите приложение с целевого устройства или симулятора
- Установить и запустить
Чтобы сделать шаг № 1 менее утомительным, я написал script для копирования изображений из пакета .xcassets
и в каталог по вашему выбору: https://github.com/johnboiles/xcasset_exporter
mkdir Images
./xcasset_exporter.py MyProject/Images.xcassets Images
Ответ 6
У меня возникла проблема, когда некоторые изображения в xcassets работали, а другие - нет (только для iOS 7.1).
Я решил это, удалив проблемные наборы изображений и создав новые с разными именами.
Ответ 7
Если вы пытаетесь использовать внешний комплект с соответствующими изображениями PNG, хранящимися в папке "старого стиля" или внутри xcassets, тогда приложения, запущенные на iOS 7, будут не иметь доступ к этим изображениям.
Я попробовал предложение из другого ответа здесь, чтобы добавить путь папки "старого стиля" к изображениям во внешнем комплекте, но это не сработало для меня. Мое решение, которое соответствует моему сценарию, заключалось в том, чтобы открыть выход для ресурса в наконечнике внутри внешнего пакета. Это позволило основному приложению установить с ним доступное изображение. Является ли это ошибкой или просто ограничением в использовании наконечников, содержащихся во внешних пакетах с iOS 7, будет иметь меньшее значение, поскольку оно подходит к закату использования...
PS: Приложения, работающие на iOS 8, где можно получить доступ к изображениям во внешнем комплекте xcassets, просто выберите ваш яд для поддержки iOS 7.