Ответ 1
Я закончил вставлять все файлы .h и .m в свой проект, а затем он работал нормально. Я получил ту же ошибку, когда я включил только файлы .a и .h.
При вызове 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"]];
Я закончил вставлять все файлы .h и .m в свой проект, а затем он работал нормально. Я получил ту же ошибку, когда я включил только файлы .a и .h.
В соответствии с: связывает objective-c категории в статической библиотеке
Из-за ошибки компоновщика в XCode вам нужно установить "Другие флаги компоновщика", чтобы настроить цель сборки. Установка этого флага следующим образом должна устранить эту ошибку.
-force_load ${BUILT_PRODUCTS_DIR}/libSDWebImage.a
Это решит проблему: откройте вкладку "Настройки сборки" в разделе "Связывание", найдите "Другие флаги компоновщика" и добавьте флаг "-ObjC":
Если у кого-то, как и у меня, все еще есть проблемы после просмотра всех других ответов здесь (например, force_load или load_all) даже после выполнения всех правильных инструкций по установке, вот что я узнал после выполнения поиска в Интернете:
Решение этой проблемы: Только делайте это, если вам не нужен 64-разрядный процессор для вашего приложения (слишком новый для программирования iOS, чтобы узнать, действительно ли это предложение)
Перейдите к настройкам сборки > Архитектура
В разделе Архитектура выберите Standard architectures (armv7,armv7s)
Только для сборки активной архитектуры убедитесь, что она Да для Debug
и Release
Мой источник: https://github.com/rs/SDWebImage/issues/494
Надеюсь, это поможет тем, кто, как и я, нашел это, пытаясь решить вашу проблему =)
В документах 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 кажется, что вам нужно сделать медленный двойной щелчок, чтобы правильно изменить настройки сборки. Выполнение обычного двойного щелчка показывает полностью закрученное и нерабочее всплывающее окно.
Решена та же проблема, что и добавление libSDWebImage.a для создания фаз > Связывание двоичных файлов с библиотеками.
Если вы читаете документ здесь https://github.com/rs/SDWebImage, внизу есть ссылка скачать с файлами CORRECT на download. Следуя этому примеру, он работает отлично.
Ошибка, которую я сделал, и, по-видимому, другие, я загрузил проект github и попытался использовать это.
Все началось для меня, как только я связал "ImageIO.framework" с моим основным проектом.
Вы также можете установить "Другие флаги компоновщика" на -all_load. Это решает проблему, когда внешняя структура (например, фреймворк filepicker) требует связывания с SDWebImage.
-force_load не является основной проблемой (когда возникает проблема с достижением) для устранения этой проблемы связывания.
Убедитесь, что ваши скомпилированные файлы имеют UIIMageView + AFNetworking.m, если вы используете инфраструктуру AFNetworking.
Вам нужно добавить libSDWebImage.a в ваши связанные двоичные файлы, а также проверить другие флаги компоновщика, он должен быть -ObjC
Оформите свой выбор, когда вы вытаскиваете файлы SDWebimages в Xcode, отмечайте "создавать группы" в добавленных папках и не помещайте "ссылки на папку".
Отметьте точно как изображение: