5

注意:这与此问题相似,但不一样。我保证。

我有一系列表视图,它们调用模式视图来对表的内容进行排序。为此,我在一个表视图控制器的头文件中设置了一个简单的协议,并且效果很好。然后我将此协议复制到我的其他表视图控制器并收到此警告:

'ModalViewDelegate' 的重复协议定义被忽略

现在我意识到这只是一个警告,但我不想每次编译时都看到它。为了摆脱警告,我导入了最初定义协议的头文件。再一次,我并不完全满意。将头文件导入每个表视图似乎很草率,这样我就可以在没有警告的情况下使用协议。

如果你已经读到这里,我感谢你。我的问题是‘为什么会这样?有没有更好的方法来消除这个警告,同时仍然使用相同的协议?

4

2 回答 2

7

是否有更好的方法可以在仍使用相同协议的同时消除此警告?

编译器需要了解协议以便您引用它。有两种方法可以做到这一点:将声明协议的标头导入您正在使用它的文件中,或者在这些文件中对协议进行前向声明:@protocol MyProtocol;. 第二个仅在协议需要相互引用时才真正有用(以避免循环导入);如果一个类需要采用协议,就需要看到协议中方法的声明,也就是说它需要看到协议声明本身,即头部。

将头文件导入每个表视图似乎很草率,这样我就可以在没有警告的情况下使用协议。

这不是马虎,这是事情的运作方式。听起来您将协议声明放入其自己的标头中并在需要的任何地方导入它可能是有意义的。

于 2012-04-03T21:08:08.890 回答
2

我发现了一个类似的警告,其中在类的标题中定义了 @protocol。将该协议分解为自己的 .h 并将其导入其他地方修复它。

于 2012-04-10T15:44:15.997 回答