20

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

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

可能性一:一个类别实例方法被声明了两次。(此处描述:SO

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

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

但是,我检查了所有的导入,并且在整个项目中只导入了一次框架。此外,仅在构建阶段出现一次。

我的程序运行没有崩溃,大概是因为使用了最后添加的类别定义并且它恰好是正确的。(来源

问题1:有没有办法在添加之前知道这两个类别的位置?

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

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

发生在:

xcode 4.6 和 xcode 5

iOS6 & iOS7

4

4 回答 4

41

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

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

对: #import 'MyClass+MyCategory.h'

于 2014-08-25T19:57:30.860 回答
6

我遇到了这个错误,因为我将方法的实现直接粘贴到了头文件 ( *.h)。但是效果很好;唯一的症状 - 警告。

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

于 2015-04-22T18:05:43.940 回答
4

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

于 2013-11-19T00:16:05.717 回答
0

在我的情况下,包含类别的头文件为一个类导入了两次。这并不明显,因为另一个头文件也导入了相同的头文件。换句话说

//Class_with_warnings.h:
#import "Offending_Header.h" // import #1
#import "Class_A.h"          // import #2

//Whereas Class_A.h:
#import "Offending_Header.h" // import #2
于 2021-06-17T02:55:24.173 回答