2012-04-03 38 views
5

注意:这与this question类似,但它不相同。我承诺。重复的协议定义警告,但我需要此协议的倍数

我有一系列表格视图调用模式视图来排序表内容。为此,我在一个表视图控制器的头文件中设置了一个简单的协议,并且它工作得很好。然后我复制这个协议到我的其他表视图控制器,并得到了这样的警告:“ModalViewDelegate”的

复制协议定义被忽略

现在我意识到,这只是一个警告,但我会而不是每次编译时都看不到。为了摆脱警告,我导入了协议最初定义的头文件。我再一次不完全满意。将头文件导入每个表视图看起来很sl just,所以我可以在没有警告的情况下使用该协议。

如果您已经阅读了这篇文章,我感谢您。我的问题是'为什么会发生这种情况?在仍然使用相同的协议时,有没有更好的方法来摆脱这个警告?'

+1

没有代码会很难做任何有用的事情。 – CodaFi 2012-04-03 21:01:34

+2

在其自己的头文件中实现该协议,并在需要时包含该协议。 – 2012-04-03 21:06:05

回答

7

有没有更好的方法来摆脱这个警告,同时仍然使用相同的协议?

编译器需要了解协议以便引用它。有两种方法可以实现这一点:将声明协议的标头导入到正在使用它的文件中,或者在这些文件中对协议进行前向声明:@protocol MyProtocol;。第二个实际上只有在协议需要彼此引用时才有用(以避免循环导入);如果一个类需要采用该协议,则需要查看该协议中方法的声明,这意味着它需要看到协议声明本身,即头部。

将头文件导入到每个表视图看起来很sl just,所以我可以使用没有警告的协议。

这不是马虎,这是事情的方式。听起来好像你可以把协议声明放在它的自己的头文件中,并在需要时导入它。

+1

谢谢!我完全忘记了我可以为协议创建一个头部。这是我正在寻找的解决方案。 – Squatch 2012-04-03 21:11:39

2

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