类别冲突:类别中的实例方法与来自另一个类别的相同方法的冲突

Emi*_*fil 16 xcode objective-c ios objective-c-category opentok

我知道有两种情况会导致以下错误:

ld: warning: instance method 'resetAudioSystem' in category from /opentok-ios-sdk/Opentok.framework/Opentok(OTPublisher+AudioSnoop.o) conflicts with same method from another category
ld: warning: instance method 'attachAudioSnoopBlock:' in category from /opentok-ios-sdk/Opentok.framework/Opentok(OTPublisher+AudioSnoop.o) conflicts with same method from another category
ld: warning: instance method 'setVideoSnoopDelegate:' in category from /opentok-ios-sdk/Opentok.framework/Opentok(OTPublisher+VideoSnoop.o) conflicts with same method from another category
Run Code Online (Sandbox Code Playgroud)

可能性1:类别实例方法被声明两次.(在此描述:SO)

但是,当我搜索3个实例方法中的任何一个(在Xcode或Grep中)时,我发现它没有被声明两次.

可能性2:意外导入.m文件.(在此描述:SO)

但是,我检查了所有的导入,我只在整个项目中导入一次框架.此外,仅在Build Phases中显示一次.

我的程序在没有崩溃的情况下运行,可能是因为使用了添加的最后一个类别定义并且它恰好是正确的.(来源)

问题1:在添加之前,有没有办法告诉两个类别的位置?

问题2:关于如何解决这个问题的任何其他想法?

注意:Opentok Framework是一个二进制文件

发生在:

xcode 4.6&xcode 5

iOS6和iOS7

mar*_*_st 28

我有这个警告,因为我不小心导入了类别的实现文件而不是它的头文件.所以:

错误: #import 'MyClass+MyCategory.m'

对: #import 'MyClass+MyCategory.h'


Mat*_*usz 6

我遇到了这个错误,因为我确实将方法的实现粘贴到头文件 ( *.h) 中。然而,它运行良好;唯一的症状 - 警告。

检查您的实现是否在正确的 ( *.m) 文件中。


son*_*ngz 4

这看起来像一个链接器错误。也许 SDK 被链接了不止一次,或者 -ObjC 丢失/出现在不应该出现的地方。检查链接器标志。尝试删除所有 OpenTok 框架,确保您的项目中缺少该框架,然后重新下载并再次安装。