-->

在静态的iOS库无法识别的选择调用类中的方法(Unrecognized selector calli

2019-07-29 06:04发布

我使用一些第三方软件,以书面形式使用的Xcode 4.3.2的iPad应用提供帮助。 该软件是开源的,一般是成立这样的代码将与任何代码开发者的应用程序写入一起进行编译。 因为我是在许多地方使用该软件,我决定建立它作为iPhone模拟器静态库。

我是能够建立图书馆,和转换一个应用程序链接到该库的编译,而不是原始的源代码。 然而,当我去运行在模拟器上的应用程序,我得到一个错误,指出, 无法识别的选择发送到实例

我已验证程序成功使用静态库的部分。 然而,有一个代码一块试图调用的方法的对象上,并且其中发生故障。 被调用的方法没有在该对象的界面实际上限定。 相反,它是在定义的类别为对象的类的附加模块提供。 该模块的头文件被正确包括和编译器应该已经能够在运行时找到类中的方法,并将其应用于对象,然而,上述错误发生。

我用“纳米”命令以验证该类别方法在静态库中存在。 下面是输出的一个示例:

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

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

Answer 1:

您的第三方框架可能使用在现有的(苹果)类的类别。 但是加载/找到类别中,您需要添加-ObjC国旗在构建设置下的Other Linker Flags



Answer 2:

Pfitz答案是伟大的,但这样会导致编译器将一堆没有用的二进制文件加载到您的项目,这是不是你想要的。 请参考此答案知道为什么https://stackoverflow.com/a/22264650/1363997

这里是最好的解决办法:

1)选择从左侧面板项目目标(文件夹导航器)
2)选择“构建阶段”自来水
3)扩大“编译源”细胞
4)打的加号按钮在底部,然后添加类别的.m文件

完成!

注意:你必须通过你自己的文件夹导航到搜索文件,不要在搜索字段中键入文件名



文章来源: Unrecognized selector calling category method in static iOS library