Comment réparer " protocole non implémenté"
Lorsque je crée un nouveau contrôleur appelé TestController
, j'insère
<UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate,UISearchBarDelegate>
À l'interface de Test.h
Lorsque je lance l'application sur le simulateur, il y a beaucoup de problèmes qui disent "implémentation incomplète" et "méthode dans le protocole non implémentée"
Je sais qu'une méthode n'est pas implémentée, mais laquelle? Comment puis-je savoir quelle méthode je devrais ajouter?
4 réponses
Affiche le navigateur de problèmes et développe l'un des problèmes "méthode dans le protocole non implémenté". Le premier élément de détail vous montrera où la méthode est définie dans les en-têtes (et, par conséquent, dans quel @protocole elle se trouve). Mieux encore, cependant, le deuxième détail vous montrera le nom du protocole.
Basculez vers le navigateur de problèmes. Ignorez le message implémentation incomplète , et regardez le message méthode dans le protocole non implémenté . Vous pouvez étendre ce message obtenez plus d'informations fournies par le compilateur. Le premier détail est ce que vous cherchez:
Vous pouvez voir ici que j'ai oublié d'inclure une méthode pour tableView:numberOfRowsInSection:
. Je peux copier cette déclaration et le coller dans mon propre code pour commencer à écrire la méthode.
Notez qu'il y a trois problèmes dans mon navigateur de problèmes. Le troisième est une autre méthode manquante, qui peut également être développée et copiée de la même manière.
Il y a deux choses auxquelles je peux penser que vous pouvez rechercher. Tout d'abord, regardez dans votre fichier .h
et voyez si vous avez des prototypes de méthodes que vous avez peut-être oublié d'implémenter, ou bien implémentés, puis modifiés l'implémentation de sorte qu'il ne corresponde plus à la signature de la méthode du prototype.
Deuxièmement, si le compilateur ne vous dit pas quelles méthodes manquent, regardez la documentation de UITableViewDelegate
, UITableViewDataSource
, etc. Dans la section Tâches, où il répertorie les différentes classes publiques et méthodes d'instance, il dira "méthode requise" à côté de tout ce qui doit être là. Par exemple, si votre classe est conforme au protocole UITableViewDataSource
delegate, -tableView:cellForRowAtIndexPath:
et -tableView:numberOfRowsInSection:
sont requis.
Vérifiez votre préfixe projectname.fichier pch. Je me suis emporté là-bas et j'ai importé quelque chose que je n'aurais pas dû, et cela a donné l'impression que le protocole que j'implémentais dans cette classe n'était pas implémenté, alors qu'en fait c'était le cas. Il suffit d'aller de l'avant et assurez-vous que vous n'incluez pas de protocoles là-bas.
Dans mon cas, c'était parce que le fichier que je n'aurais pas dû importer était un autre fichier de protocole , qui n'était pas directement lié à la classe où j'obtenais le avertissement.
Aussi, lorsque vous nettoyez votre *-Préfixe.pch fichier, assurez-vous de fermer et rouvrir Xcode. Je devais le faire pour le faire prendre.
J'espère que cela aide!!
Vérifiez votre fichier d'implémentation pour voir si vous avez inclus le. Si vous avez un peu, vous devez le supprimer.