Подтвердить что ты не робот

Изображения, не отображаемые в 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, похоже, это, вероятно, ошибка.

4b9b3361

Ответ 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.