SDWebImage:setImageWithURL在用于设置UITableViewCell的图像时失败

时间:2011-12-14 13:04:38

标签: uitableview sdwebimage

当调用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 个答案:

答案 0 :(得分:17)

按照: linking objective-c categories in a static library

由于XCode中存在链接器错误,您需要设置“其他链接器标志”设置构建目标。如下设置标志应消除此错误。

-force_load ${BUILT_PRODUCTS_DIR}/libSDWebImage.a

答案 1 :(得分:11)

这将解决问题:打开“Build Settings”选项卡,在“Linking”部分找到“Other Linker Flags”设置并添加“-ObjC”标志: enter image description here

答案 2 :(得分:9)

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

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

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

  1. 转到构建设置>体系结构

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

  3. 仅在“构建活动架构”下,确保DebugRelease

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

    我希望这可以帮助那些像我一样在尝试解决问题时找到这个问题的人=)

答案 3 :(得分:6)

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

答案 4 :(得分:4)

在SDWebImage文档中,它表示您必须将“Other Linker Flags”设置为-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,我通过在Build Settings中的“Other Linker Flags”中设置以下内容来实现:“ - load_all $(SRCROOT)/SDWebImage.framework/SDWebImage”。链接到libSDWebImage [ARC] .a,这是一些消息来源所建议的,对我来说不起作用。

顺便说一句,在Xcode 4.4中,您似乎必须进行慢速双击才能正确更改构建设置。正常双击显示完全拧紧和不工作的弹出窗口。

答案 5 :(得分:2)

解决了将libSDWebImage.a添加到Build Phases>的相同问题。链接二进制文件与库。

答案 6 :(得分:1)

如果您在此处阅读文档https://github.com/rs/SDWebImage,则会将下载链接指向download的CORRECT文件。按照这个例子,它完美地运作。

我犯了错误,似乎是其他人,我下载了github项目,并尝试使用它。

答案 7 :(得分:1)

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

答案 8 :(得分:0)

您还可以将'Other Linker Flags'设置为-all_load。这解决了外部框架(例如filepicker框架)需要链接SDWebImage的问题。

答案 9 :(得分:0)

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

  1. 编辑SDWebImage方案,
  2. 运行方案设置以供发布
  3. run(with device)
  4. libSDWebImage.a将在release-iphoneos目录中生成。
  5. 设置target-> BuildPhase->链接Binarywithlibrary ..添加此lib。
  6. 完成..

答案 10 :(得分:0)

如果您正在使用AFNetworking框架,请确保您的已编译文件具有UIIMageView + AFNetworking.m。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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

完全按照图片标记:

enter image description here