我正在使用一些第三方软件来帮助使用Xcode 4.3.2编写iPad应用程序。该软件是开源的,通常设置为使其代码与开发人员为应用程序编写的任何代码一起编译。因为我在很多地方使用该软件,所以我决定将其构建为iOS模拟器的静态库。
我能够构建库,并将一个应用程序转换为链接到该库,而不是编译原始源代码。但是,当我在模拟器上运行应用程序时,我收到一条错误消息,指出无法识别的选择器已发送到实例。
我已经验证程序是否成功使用了部分静态库。但是,有一段代码试图在一个对象上调用一个方法,并在那里发生故障。被调用的方法实际上并未在该对象的接口中定义。而是在另一个模块中提供,该模块定义该对象类的类别。正确包含该模块的头文件,编译器应该能够找到类别方法并将其应用于对象,但在运行时,会出现上述错误。
我使用'nm'命令验证静态库中是否存在类别方法。以下是输出的示例:
nm libStaticLibrary.a | grep categoryMethod
00000130 t -[SomeClass(Category) categoryMethod:]
0000354c s -[SomeClass(Category) categoryMethod:].eh
人们对如何使该库与所需应用程序正常工作有什么想法?
答案 0 :(得分:24)
您的第三方框架很可能使用现有(苹果)类的类别。但要加载/查找类别,您需要在-ObjC
下的构建设置中添加Other Linker Flags
标记
答案 1 :(得分:3)
Pfitz答案很好,但是这会导致编译器将大量未使用的二进制文件加载到您的项目中,这不是您想要的。请参阅此答案以了解https://stackoverflow.com/a/22264650/1363997
的原因这是最佳解决方案:
1)从左侧面板(文件夹导航器)中选择项目目标
2)选择“构建阶段”点击
3)展开“编译源”单元格
4)点击底部的加号按钮,然后添加类别的.m文件
完成!
注意:您必须通过自己浏览文件夹来搜索文件,不要在搜索字段中键入文件名称