SDWebImage: setImageWithURL не работает, когда используется для установки изображения UITableViewCell

При вызове setImageWithURL он терпит неудачу со следующим,

[UIImageView setImageWithURL: placeholderImage:]: непризнанный селектор, отправленный в экземпляр 0x149a20 2011-12-14 18: 11: 38.060 [781: 707] Завершение приложения из-за неперехваченного исключения 'NSInvalidArgumentException', причина: '- [UIImageView setImageWithURL: placeholderImage:]: непризнанный селектор, отправленный в пример 0x149a20 '

Я могу подтвердить, что я включил проект SDWebImage и необходимые заголовки правильно, поскольку я могу успешно использовать SDWebImageManager.

Ниже приведен код, в котором я назвал метод категории UIImageView setImageWithURL

NSURL* url = [NSURL URLWithString:@"www.abc.com/abc.png"];
[cell.imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"abc.png"]];    

Ответы

Ответ 1

Я закончил вставлять все файлы .h и .m в свой проект, а затем он работал нормально. Я получил ту же ошибку, когда я включил только файлы .a и .h.

Ответ 2

В соответствии с: связывает objective-c категории в статической библиотеке

Из-за ошибки компоновщика в XCode вам нужно установить "Другие флаги компоновщика", чтобы настроить цель сборки. Установка этого флага следующим образом должна устранить эту ошибку.

-force_load ${BUILT_PRODUCTS_DIR}/libSDWebImage.a

Ответ 3

Это решит проблему: откройте вкладку "Настройки сборки" в разделе "Связывание", найдите "Другие флаги компоновщика" и добавьте флаг "-ObjC": enter image description here

Ответ 4

Если у кого-то, как и у меня, все еще есть проблемы после просмотра всех других ответов здесь (например, force_load или load_all) даже после выполнения всех правильных инструкций по установке, вот что я узнал после выполнения поиска в Интернете:

  • Эта проблема возникает только при использовании iPhone 5S или 64-битного симулятора
  • Это проблема с libwebp

Решение этой проблемы: Только делайте это, если вам не нужен 64-разрядный процессор для вашего приложения (слишком новый для программирования iOS, чтобы узнать, действительно ли это предложение)

  • Перейдите к настройкам сборки > Архитектура

  • В разделе Архитектура выберите Standard architectures (armv7,armv7s)

  • Только для сборки активной архитектуры убедитесь, что она Да для Debug и Release

Мой источник: https://github.com/rs/SDWebImage/issues/494

Надеюсь, это поможет тем, кто, как и я, нашел это, пытаясь решить вашу проблему =)

Ответ 5

В документах SDWebImage говорится, что вам нужно установить "Другие флаги компоновщика" на -ObjC. Это не сработало для меня. Вместо этого я установил его в -all_load. Мне также пришлось удалить -ObjC. Объяснение того, что происходит, можно найти здесь:

http://developer.apple.com/library/mac/#qa/qa1490/_index.html

Это также объясняет, почему -ObjC выходит из строя: "Важно: для приложений с 64-разрядной и iPhone-ОС существует ошибка компоновщика, которая предотвращает загрузку файлов объектов из статических библиотек, содержащих только категории и классы. для использования флагов f-all_load или -force_load"

Использование -all_load увеличивает размер исполняемого файла. Вы можете использовать -force_load для смягчения этого. Для SDWebImage 2.7.3 я сделал это, установив следующее в "Другие флаги компоновщика" в настройках сборки: "-load_all $(SRCROOT)/SDWebImage.framework/SDWebImage". Связывание с libSDWebImage [ARC].a, о чем сообщают некоторые источники, не работает для меня.

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

Ответ 6

Решена та же проблема, что и добавление libSDWebImage.a для создания фаз > Связывание двоичных файлов с библиотеками.

Ответ 7

Если вы читаете документ здесь https://github.com/rs/SDWebImage, внизу есть ссылка скачать с файлами CORRECT на download. Следуя этому примеру, он работает отлично.

Ошибка, которую я сделал, и, по-видимому, другие, я загрузил проект github и попытался использовать это.

Ответ 8

Все началось для меня, как только я связал "ImageIO.framework" с моим основным проектом.

Ответ 9

Вы также можете установить "Другие флаги компоновщика" на -all_load. Это решает проблему, когда внешняя структура (например, фреймворк filepicker) требует связывания с SDWebImage.

Ответ 10

-force_load не является основной проблемой (когда возникает проблема с достижением) для устранения этой проблемы связывания.

  • изменить схему для SDWebImage,
  • Запустить схему запуска для выпуска
  • run (с устройством)
  • libSDWebImage.a будет создан в каталоге release-iphoneos.
  • установить target- > BuildPhase- > ссылка Binarywithlibrary.. добавить эту lib.
  • Готово..

Ответ 11

Убедитесь, что ваши скомпилированные файлы имеют UIIMageView + AFNetworking.m, если вы используете инфраструктуру AFNetworking.

Ответ 12

Вам нужно добавить libSDWebImage.a в ваши связанные двоичные файлы, а также проверить другие флаги компоновщика, он должен быть -ObjC

Ответ 13

Оформите свой выбор, когда вы вытаскиваете файлы SDWebimages в Xcode, отмечайте "создавать группы" в добавленных папках и не помещайте "ссылки на папку".

Отметьте точно как изображение:

введите описание изображения здесь