問題描述
用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++