在 iPhone 中向 UIImage 添加类别

Posted

技术标签:

【中文标题】在 iPhone 中向 UIImage 添加类别【英文标题】:Adding a category to UIImage in iPhone 【发布时间】:2011-04-09 12:14:09 【问题描述】:

我想向 UIImage 添加一个类别并将其链接到我的 iPhone 应用程序,但出现此错误:

(无法识别的选择器)

我的代码:DoingStuff.h

#import <UIKit/UIKit.h>

@interface UIImage (DoingStuff)

- (UIImage *)performStuff;

@end

DoingStuff.m

#import "DoingStuff.h"

@implementation UIImage (DoingStuff)

- (UIImage *)performStuff 

    // My code here


@end

但是当我运行我的程序时,我得到了这个:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UIImageView performStuff:]: unrecognized selector sent to instance 0x4b415d0”

【问题讨论】:

“链接”是什么意思?类别是否放在静态库中? 不,我只想在我的程序中使用新类别在 UIImage 上做一些事情。 你看过我的回答了吗?似乎您只是没有在调用类中添加 import 语句。 【参考方案1】:
[UIImage performStuff]; // Correct call

不是

[UIImageView performStuff]; // It is a UIImage category not UIImageView

对于初学者。

所以你会做这样的事情......

UIImage* image = [UIImage imageNamed:@"test"];
[image performStuff];

【讨论】:

-1:不知道为什么会获得选票。他清楚地编写了一个实例方法,而不是类方法。您的“正确调用”明显无效。 @jordan 正在使用类方法语法来说明问题。【参考方案2】:

如果类别在目标项目中,只需包含 DoingStuff.h。如果在静态库中,链接器不会链接它,因为它不知道它应该链接它不知道将使用的目标 c 对象。

您需要将 -all_load、-force_load 或 -ObjC 之一放在目标项目的其他链接器选项中。不同的人报告其中一些或全部使链接器工作。从 XCode 4 -ObjC 开始就足够了。

也就是说,我对其中任何一个都没有成功,并最终将库中的类别作为参考添加到目标项目中。

编辑

刚刚看到我的错误,可能它被链接了,但它是一个实例方法,你将它作为一个类方法来调用:

不是

[UIImage performStuff];

但是

UIImage *image = <your image>;
[image performStuff];

【讨论】:

谢谢,乔丹回答了我的问题。 @iPadNewbie:什么!?错误答案如何“回答您的问题”?【参考方案3】:

根据您设置类别的方式,您需要这样调用它:

UIImage* myImage = [UIImage imageNamed:@"testImage"];
[myImage performStuff];

此外,您没有遵循类别的命名约定。你的类名应该更像“`UIImage+DoingStuff.h”。我建议对其进行重构,以便其他人更清楚它是一个类别。

当然,你需要将头文件导入到你想要使用的类中:

#import "DoingStuff.h"

【讨论】:

以上是关于在 iPhone 中向 UIImage 添加类别的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone 设置应用程序中向滑块添加文本标签

你如何允许用户在 iPhone SDK 中向 tableview 添加项目?

iPhone - 将 UIImage 添加到文件夹

在 iOS 10 中向 UILocalNotification 添加操作

左侧单点触控 iphone 上带有圆角的 UIImage

我需要在 UIImage imageNamed 中添加 @3x 后缀吗?