静态iOS库中无法识别的选择器调用类别方法

Tro*_*mas 12 objective-c ios unrecognized-selector

我正在使用一些第三方软件来帮助使用Xcode 4.3.2编写iPad应用程序.该软件是开源的,通常设置为使其代码与开发人员为应用程序编写的任何代码一起编译.因为我在很多地方使用该软件,所以我决定将其构建为iOS模拟器的静态库.

我能够构建库,并将一个应用程序转换为链接到该库,而不是编译原始源代码.但是,当我在模拟器上运行应用程序时,我收到一条错误,指出发送到实例的无法识别的选择器.

我已经验证该程序是否成功使用了部分静态库.但是,有一段代码试图在对象上调用方法,以及发生故障的方法.被调用的方法实际上并未在该对象的接口中定义.而是在另一个模块中提供,该模块定义该对象类的类别.正确包含该模块的头文件,编译器应该能够找到类别方法并将其应用于对象,但在运行时,会出现上述错误.

我使用'nm'命令来验证静态库中是否存在类别方法.以下是输出示例:

nm libStaticLibrary.a | grep categoryMethod
00000130 t -[SomeClass(Category) categoryMethod:]
0000354c s -[SomeClass(Category) categoryMethod:].eh
Run Code Online (Sandbox Code Playgroud)

人们对如何使这个库与所需的应用程序正常工作有什么想法?

Pfi*_*itz 24

您的第三方框架可能使用现有(苹果)类的类别.但要加载/查找类别,您需要-ObjC在构建设置下添加标记Other Linker Flags

buildsettings

  • 必须在使用库的目标的链接器设置中设置,而不是在库本身中设置. (2认同)