我在Xcode项目中有两个框架,它们都定义了一个同名类(B.framework和C.framework都有一个名为MyClass的类),从而产生了如下警告:
Duplicate symbol _OBJC_METACLASS_$_MyClass originally in B.framework/B(MyClass.o) now lazily loaded from C.framework/C(MyClass.o)
Duplicate symbol _OBJC_CLASS_$_MyClass originally in B.framework/B(MyClass.o) now lazily loaded from C.framework/C(MyClass.o)
然后,在运行时仅加载其中一个实现,而尝试使用另一个实现将导致“无法识别的选择器发送到实例”,因为它们是完全不同的类(即使它们具有相同的名称)。
我直接在代码中使用了MyClass实现中的一个,但是另一个框架仅在内部使用其MyClass,我不知道为什么还要导出它(它甚至没有在框架头文件中提到,我使用
nm
查看符号)。如何使两个框架都能工作?
最佳答案
Obj-C中没有“导出”类之类的东西。确切地说,没有“非导出”类之类的东西。正是这个问题正因为如此,强烈建议对所有Obj-C代码在类上使用2或3个字母的前缀。您唯一的解决方案(除了不使用这些框架外)是编辑一个(或两个)框架以更改类名,或者,如果您无权访问源代码,则需要联系供应商并要求他们做出改变。
关于objective-c - 具有相同符号的两个框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8827348/