15

当调用 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"]];    
4

13 回答 13

17

按照: 在静态库中链接objective-c类别

由于 XCode 中的链接器错误,您需要设置“其他链接器标志”来设置构建目标。如下设置标志应该可以消除这个错误。

-force_load ${BUILT_PRODUCTS_DIR}/libSDWebImage.a
于 2012-01-23T07:45:11.237 回答
11

这将解决问题:打开“构建设置”选项卡,在“链接”部分,找到“其他链接器标志”设置并添加“-ObjC”标志: 在此处输入图像描述

于 2013-03-03T18:14:47.900 回答
9

如果有人像我一样,在看到所有其他答案(例如 force_load 或 load_all)后仍然遇到问题,即使遵循了所有正确的安装说明,以下是我在网上搜索后学到的:

  • 仅当您使用 iPhone 5S 或 64 位模拟器时才会出现此问题
  • 这是 libwebp 的问题

此问题的解决方案: 仅当您的应用不需要 64 位处理器时才这样做(对于 iOS 编程来说太新,不知道这句话是否有效)

  1. 转到构建设置 > 架构

  2. 在架构下,选择Standard architectures (armv7,armv7s)

  3. 在 Build Active Architecture Only 下,确保两者都是YesDebugRelease

我的来源:https ://github.com/rs/SDWebImage/issues/494

我希望这可以帮助那些像我一样在尝试解决您的问题时发现此问题的人 =)

于 2014-01-30T00:21:29.767 回答
6

我最终将所有 .h 和 .m 文件插入到我的项目中,然后它工作正常。当我只包含 .a 和 .h 文件时,我得到了同样的错误。

于 2012-01-12T12:05:25.483 回答
4

在 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标志”

使用 -all_load 会增加可执行文件的大小。您可以使用 -force_load 来缓解这种情况。对于 SDWebImage 2.7.3,我通过在构建设置的“其他链接器标志”中设置以下内容来做到这一点:“-load_all $(SRCROOT)/SDWebImage.framework/SDWebImage”。链接到一些消息来源建议的 libSDWebImage[ARC].a 对我不起作用。

顺便说一句,在 Xcode 4.4 中,您似乎必须缓慢双击才能正确更改构建设置。进行正常的双击会显示完全搞砸且无法正常工作的弹出窗口。

于 2012-11-10T07:09:41.463 回答
2

解决了将 libSDWebImage.a 添加到 Build Phases > Link Binary with Libraries 的相同问题。

于 2015-01-20T13:24:48.607 回答
1

一旦我将“ImageIO.framework”链接到我的主项目,一切都开始为我工作。

于 2013-05-01T15:20:31.730 回答
1

如果您在此处阅读文档https://github.com/rs/SDWebImage在底部有一个下载链接,其中包含要下载的正确文件。按照该示例,它可以完美运行。

我犯的错误以及其他人犯的错误是我下载了 github 项目并尝试使用它。

于 2013-03-19T10:24:47.957 回答
0

您还可以将“其他链接器标志”设置为 -all_load。这解决了外部框架(例如文件选择器框架)需要链接到 SDWebImage 的问题。

于 2012-10-24T02:55:46.293 回答
0

确保你的编译文件有 UIIMageView+AFNetworking.m 以防你使用 AFNetworking 框架。

于 2014-01-02T13:17:07.323 回答
0

-force_load 不是解决基本问题(当发生问题时)来解决这个链接问题..

  1. SDWebImage 的编辑方案,
  2. 为发布设置的运行方案
  3. 运行(带设备)
  4. libSDWebImage.a 将在 release-iphoneos 目录中生成。
  5. set target->BuildPhase->link Binarywithlibrary .. 添加这个库。
  6. 完毕..
于 2013-04-23T04:57:42.797 回答
0

您需要在链接的二进制文件中添加 libSDWebImage.a,还要检查其他链接器标志,它应该是 -ObjC

于 2015-11-28T23:09:55.173 回答
0

当您将 SDWebimages 文件拉入 Xcode 时,请检查您的选择,在添加的文件夹中标记“创建组”,并且不要标记“创建文件夹引用”。

完全按照图片标记:

在此处输入图像描述

于 2015-12-10T14:21:57.513 回答