【问题标题】:Duplicate protocol definition warning, but I need multiples of this protocol重复协议定义警告,但我需要该协议的倍数
【发布时间】:2012-04-03 20:59:09
【问题描述】:

注意:这类似于this question,但又不一样。我保证。

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

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

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

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

【问题讨论】:

  • 没有代码真的很难做任何有用的事情。
  • 在自己的头文件中实现协议,并在需要的地方包含。

标签: objective-c


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢!我完全忘记了我可以为协议制作一个标题。这是我一直在寻找的解决方案。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 2014-04-06
    相关资源
    最近更新 更多