问题描述
用category造成无法识别 unrecognized selector
错误。错误原因是使用了category扩展自定义,编译工程在未添加 -Objc时提示无法识别
比如我在工程中自己定义了一个[NSString+Trans]
,并在工程的.h中调用了类方法,例如 [NSString hexToBytes]
,当根据这个写法生成的.a 在另一个工程中调用,编译的时候报 unrecognized selector sent to class
参考文章
解决方法:
方案一:不使用
category
,也就是[NSString+Trans]
换一个名字如NLMyTransMethod
-
方案二:继续使用当前.a,但是在调用这个.a的工程中增加
- -all_load Loads all members of static archive libraries.
- -ObjC Loads all members of static archive libraries that implement an Objective-C class or category.
- -force_load (path_to_archive) Loads all members of the specified static archive library. Note: -all_load forces all members of all archives to be loaded. This option allows you to target a specific archive.
翻译过来就是
- -all_load就是会加载静态库文件中的所有成员,
- -ObjC就是会加载静态库文件中实现一个类或者分类的所有成员
- -force_load(包的路径)就是会加载指定路径的静态库文件中的所有成员。所以对于使用runtime时候的反射调用的方法应该使用这三个中的一个进行link,以保证所有的类都可以加载到内存中供程序动态调用
实例截图:(最好用上面说到的
-force_load
)
-force_load
$(PROJECT_DIR)/....
-lstdc++