如何修复“未实施的协议”

时间:2011-06-27 02:55:33

标签: objective-c xcode cocoa-touch protocols compiler-warnings

当我创建一个名为TestController的新控制器时,我插入

<UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate,UISearchBarDelegate>

到Test.h的接口

当我在模拟器上运行应用程序时,会出现许多问题 “不完整的实施”和“协议中未实施的方法”

我知道有些方法没有实现,但哪一个?我怎么知道我应该添加什么方法?

4 个答案:

答案 0 :(得分:65)

显示问题导航器并展开“协议中未实现的方法”问题之一。第一个详细信息项将显示标题中定义方法的位置(因此,它所在的@protocol)。但更好的是,第二个细节将显示协议的名称。

切换到“问题”导航器。忽略不完整的实施消息,并查看方法未实施协议消息。您可以展开此消息以获取编译器提供的更多信息。第一个细节是您正在寻找的:

Method declared here

您可以在此处看到我忘记为tableView:numberOfRowsInSection:添加方法。我可以复制此声明并将其粘贴到我自己的代码中以开始编写该方法。

请注意,我的问题导航器中存在三个问题。第三种是另一种缺失的方法,也可以以相同的方式进行扩展和复制。

答案 1 :(得分:6)

我可以想到两件你可以寻找的东西。首先,查看您的.h文件,看看您是否有任何您可能忘记实现的方法原型,或者实现,然后更改实现,使其不再匹配原型的方法签名。

其次,如果编译器没有告诉您哪些方法丢失,请查看UITableViewDelegateUITableViewDataSource等文档。在“任务”部分中,它列出了各种公共类和实例方法,它会在任何需要的地方旁边说“必需的方法”。例如,如果您的班级符合UITableViewDataSource委托协议,则需要-tableView:cellForRowAtIndexPath:-tableView:numberOfRowsInSection:

答案 2 :(得分:0)

检查projectname-Prefix.pch文件。我被带走了并导入了一些我不应该拥有的东西,这使得它看起来像我在该类中实现的一个协议没有实现,实际上它是。请继续,确保您没有在那里包含任何协议。

在我的情况下,这是因为我不应该导入的文件是另一个协议文件,这与我收到警告的类没有直接关系。

当您清理* -Prefix.pch文件时,请确保关闭并重新打开Xcode。我不得不这样做才能接受它。

希望这会有所帮助!!

答案 3 :(得分:0)

检查您的实施文件,看看您是否已将其包括在内。如果你有这个位,你需要删除它。