Как исправить "Протокол не реализован"
Когда я создаю новый контроллер под названием TestController
, я вставляю
<UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate,UISearchBarDelegate>
к интерфейсу Test.h
Когда я запускаю приложение на симуляторе, есть много вопросов, которые говорят
"неполная реализация" и "метод в протоколе не реализован"
Я знаю, что какой-то метод не реализован, но какой? Как узнать, какой метод я должен добавить?
Ответы
Ответ 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
Проверьте файл реализации, чтобы увидеть, включили ли вы его. Если у вас этот бит, вам нужно его удалить.