我的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)
然后在运行时只加载其中一个实现,并且尝试使用另一个实现将导致“无法识别的选择器发送到实例”,因为它们是完全不同的类(即使它们具有相同的名称)。 / p>
我直接在我的代码中使用了一个MyClass实现,但是另一个框架仅在内部使用其MyClass 而我不知道为什么它甚至导出(它甚至没有在框架头文件中提到,我使用nm
来查看符号。
如何让两个框架都有效?
答案 0 :(得分:3)
在Obj-C中没有“导出”类这样的东西。或者更确切地说,没有“非导出”类这样的东西。这个问题正是为什么强烈建议所有Obj-C代码在类上使用2或3个字母前缀的原因。您唯一的解决方案(除了不使用这些框架)是编辑一个(或两个)框架来更改类名,或者如果您无权访问源,那么您需要联系供应商并要求他们做出改变。