Category in static library

我创建了一个category,为NSString类增加一个接口:

-(void)logMe;

在静态库内部调用这个接口没有问题。

但在引用这个静态库的App中使用这个接口:

NSString * myString = @"cnblogs";
[myString logMe];

 

会报这个错:

-[__NSCFConstantString logMe]: unrecognized selector sent to instance 0x7c6a0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString logMe]: unrecognized selector sent to instance 0x7c6a0'

 NSCFConstantString(NSString是个class cluster类,由于初始化myString用的是字符串常量,所以被初始化成NSCFConstantString对象)找不到这个接口。

为什么呢?如果你想知道真正的原因,请把这个StackoverFlow中的所有问答全看完,注意,要看完所有答案和评论。

看完了吗?看完后你会有一种感觉,就是没看懂,但好像知道怎么解决问题了,方法是:当使用XCode4.2以上版本时,给App的“other linker flags”加一个“-ObjC”选项。

WTF!但这根本不算真正解决问题。问题是为什么category会导致这个问题?既然category会导入这种问题,为什么要用它?

 

posted @ 2013-03-16 11:26  勤劳的天蓬  阅读(282)  评论(0编辑  收藏  举报