在 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 SDK 中向 tableview 添加项目?