Подтвердить что ты не робот

Как исправить "Протокол не реализован"

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

<UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate,UISearchBarDelegate>

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

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

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

4b9b3361

Ответ 1

Отобразите навигатор проблем и разверните один из проблем "метод в неработающем протоколе". Первый подробный элемент покажет вам, где метод определен в заголовках (и, таким образом, в котором @protocol it in). Тем не менее, еще лучше, вторая деталь покажет вам имя протокола.

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

Method declared here

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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