将类别应用于框架 class

Apply category to a framework class

我想要实现的是启用 PFImageView class(来自 Parse 框架)响应 SDWebImage 方法。 SDWebImage本身就是一个框架,但由于它本质上是将一个类别应用于UIImageView——而PFImageView继承自UIImageView——看来应该可以实现这一点。

我尝试创建一个单独的类别 PFImageView+SDWebImage,我只是在 .h 文件中添加了

#import <SDWebImage/UIImageView+WebCache.h>

但这显然还不够,因为我仍然收到崩溃消息并显示 [PFImageView setImageWithURL:placeholderImage:completed:]: unrecognized selector sent to instance

如何正确地实现我在这里尝试做的事情?

正确应用于 UIImageView 的类别将自动提供给子类。您不需要做任何特别的事情。而你的 header 根本不重要。 Headers 不应用类别;他们只是告诉编译器他们存在,所以你不会收到警告。加载相关实现时应用类别(具体而言,它们发生在调用 +load 方法时,但在 iOS 世界中,您可以将其视为 "when the program starts.")

所有这些都表明您根本没有加载类别代码。这是一个非常普遍的问题。确保您正在编译实现此类别的相关 .m 文件,并确保如果您从静态库链接它,则您正在使用 -ObjC 标志。有关详细信息,请参阅 QA1490。简短的版本是,如果您将类别代码放在静态库中,链接器可能会将其视为未使用并将其删除。 -ObjC 标志告诉编译器这是一个 疯狂 令人敬畏的动态 ObjC 世界,有时看起来不像它们实际使用的东西。