类是在两者中实现的。将使用两者之一

时间:2015-06-01 19:41:44

标签: ios objective-c objective-c-runtime socketrocket

我有一个使用SocketRocket的依赖项(通过CocoaPods安装)并从HeapAnalytics导入静态库的项目。显然,HeapAnalytics库已经使用了SocketRocket。编译时没有错误,但在运行时收到以下内容:

Class SRWebSocket is implemented in both [path] and [path].
One of the two will be used. Which one is undefined.

我不确定如何处理它,因为我看到的大多数解决方案都需要自己编译静态库来更改类名等,而且我无法访问源代码。

有什么建议吗?

4 个答案:

答案 0 :(得分:45)

我写了这条错误信息!•

更改班级名称或不与所述图书馆链接。

您的项目是如何配置的?有没有明确链接SR的地方?或者它是链接两个已经包含SR的静态库的产物?

如果是前者,则直接停止与SR的链接,并继承已经使用它的库附带的版本(警告:确保它具有正确的版本)。

如果是后者,那么你将不得不修改其中一个库。

•实际上,我修改了错误。过去常常暗示会使用其中一种。但这并不是真正发生的事情,不同平台的行为也不同。因此,它被改变,以便更准确地确定行为是不确定的。

答案 1 :(得分:2)

在我的情况下,当我不必要地将源文件添加到我的主应用目标和我的测试目标时,会出现此错误:

Target Membership with both targets selected

Target Membership删除测试目标解决了它:

Target Membership with only one target selected

答案 2 :(得分:2)

概述:

错误表明相同的符号/类被定义了两次。

解决方案:

  • 检查链接的框架,看是否有重复项。如果是,请删除重复的
  • 清理构建文件夹(Command + Shift + K)
  • 如果是模拟器,则重置模拟器并尝试
  • 如果是设备,请重启设备并尝试

我的经历:

我遇到过两次相同的问题,一次是重复的框架,另一次是重置模拟器帮助。

答案 3 :(得分:1)

我收到这个警告已经一个多月了,然后我终于尝试了一次,对我有用:

  1. 重置 模拟器(菜单:硬件->删除所有内容和设置...)
  2. 清理项目(Command + Shift + K)
  3. 清理 构建文件夹(Command + Option + Shift + K)
  4. 再次运行模拟器上的代码