Как исправить «Протокол не реализован» - PullRequest
25 голосов
/ 27 июня 2011

Когда я создаю новый контроллер с именем TestController, я вставляю

<UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate,UISearchBarDelegate>

к интерфейсу Test.h

Когда я запускаю приложение на симуляторе, возникает много проблем, которые говорят «неполная реализация» и «метод в протоколе не реализован»

Я знаю, что какой-то метод не реализован, но какой? Как я знаю, какой метод я должен добавить?

Ответы [ 4 ]

65 голосов
/ 20 октября 2011

Показать навигатор проблем и разверните одну из проблем «метод в протоколе не реализован». Первый подробный элемент покажет вам, где метод определен в заголовках (и, следовательно, в каком @protocol он находится). Более того, вторая деталь покажет вам название протокола.

Переключиться на Навигатор проблем. Не обращайте внимания на сообщение Incomplete реализация и посмотрите на метод в протоколе не реализовано сообщение . Вы можете развернуть это сообщение, чтобы получить больше информации, предоставленной компилятором. Первая деталь - это то, что вы ищете:

Method declared here

Здесь вы видите, что я забыл включить метод для tableView:numberOfRowsInSection:. Я могу скопировать это объявление и вставить его в свой собственный код, чтобы начать писать метод.

Обратите внимание, что в моем навигаторе ошибок есть три проблемы. Третий - еще один отсутствующий метод, который также можно развернуть и скопировать аналогичным образом.

6 голосов
/ 27 июня 2011

Есть две вещи, о которых я могу подумать, которые вы можете искать.Сначала посмотрите в файле .h и посмотрите, есть ли у вас какие-либо прототипы методов, которые вы, возможно, забыли реализовать или реализовали, а затем изменили реализацию так, чтобы она больше не соответствовала сигнатуре метода прототипа.

Во-вторых, если компилятор не сообщает вам, какие методы отсутствуют, посмотрите документацию UITableViewDelegate, UITableViewDataSource и т. Д. В разделе «Задачи», где перечислены различные методы открытого класса и экземпляра, он скажет «Обязательный метод "рядом с любым, который должен быть там.Например, если ваш класс соответствует протоколу делегата UITableViewDataSource, требуются -tableView:cellForRowAtIndexPath: и -tableView:numberOfRowsInSection:.

0 голосов
/ 15 сентября 2017

Проверьте ваш файл реализации, чтобы увидеть, если вы включили туда.Если у вас есть этот бит, вам нужно удалить его.

0 голосов
/ 14 августа 2011

Проверьте файл projectname-Prefix.pch. Я увлекся и импортировал то, чего не должен был иметь, и это выглядело так, как будто один протокол, который я реализовывал в этом классе, не был реализован, хотя на самом деле это было так. Просто продолжайте и убедитесь, что вы не включили там никаких протоколов.

В моем случае это было потому, что файл, который я не должен был импортировать, был другим файлом протокола, который не был напрямую связан с классом, где я получал предупреждение.

Также, когда вы очищаете свой файл * -Prefix.pch, убедитесь, что вы закрыли и снова открыли Xcode. Я должен был сделать это, чтобы заставить его взять.

Надеюсь, это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...