SDWebImage: setImageWithURL завершается ошибкой, когда используется для установки изображения UITableViewCell - PullRequest
15 голосов
/ 14 декабря 2011

При вызове 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"]];    

Ответы [ 13 ]

17 голосов
/ 23 января 2012

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

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

-force_load ${BUILT_PRODUCTS_DIR}/libSDWebImage.a
11 голосов
/ 03 марта 2013

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

9 голосов
/ 30 января 2014

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

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

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

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

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

  3. В разделе Построить только активную архитектуру убедитесь, что это Да для Debug и Release

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

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

6 голосов
/ 12 января 2012

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

4 голосов
/ 10 ноября 2012

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

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

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

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

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

2 голосов
/ 20 января 2015

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

1 голос
/ 01 мая 2013

У меня все заработало, когда я связал «ImageIO.framework» со своим основным проектом.

1 голос
/ 19 марта 2013

Если вы читаете документ здесь https://github.com/rs/SDWebImage, внизу есть ссылка для скачивания с ПРАВИЛЬНЫМИ файлами для загрузки . Следуя этому примеру, он работает отлично.

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

0 голосов
/ 10 декабря 2015

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

Пометить в точности как рисунок:

enter image description here

0 голосов
/ 29 ноября 2015

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

...