我创建了一个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会导入这种问题,为什么要用它?