Cómo arreglar " Protocolo No Implementado"


Cuando hago un nuevo controlador llamado TestController, inserto

<UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate,UISearchBarDelegate>

A la interfaz del ensayo.h

Cuando corro la aplicación en el simulador, hay muchos problemas que dicen "aplicación incompleta"y" método del protocolo no aplicado "

Sé que algún método no se implementa, pero ¿cuál? ¿Cómo sé qué método debo agregar?

Author: Josh Caswell, 2011-06-27

4 answers

Muestre el navegador de problemas y expanda uno de los problemas de "método en protocolo no implementado". El primer elemento detail le mostrará dónde está definido el método en los encabezados (y, por lo tanto, en qué @protocolo está). Aún mejor, sin embargo, el segundo detalle le mostrará el nombre del protocolo.

Cambie al navegador de problemas. Ignore el mensaje Incomplete implementation , y mire el mensaje Method in protocol not implemented . Puede expandir este mensaje obtenga más información que el compilador proporcionó. El primer detalle es lo que estás buscando:

Método declarado aquí

Puedes ver aquí que he olvidado incluir un método para tableView:numberOfRowsInSection:. Puedo copiar esta declaración y pegarla en mi propio código para comenzar a escribir el método.

Tenga en cuenta que hay tres problemas en mi navegador de problemas. El tercero es otro método que falta, que también se puede expandir y copiar de la misma manera.

 65
Author: Steven Fisher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-05 22:13:07

Se me ocurren dos cosas que puedes buscar. Primero, busque en su archivo .h y vea si tiene algún prototipo de método que haya olvidado implementar, o si lo implementó y luego cambió la implementación de manera que ya no coincida con la firma del método del prototipo.

En segundo lugar, si el compilador no le dice qué métodos faltan, mire la documentación de UITableViewDelegate, UITableViewDataSource, etc. En la sección Tareas, donde enumera las diversas clases públicas y métodos de instancia, dirá "método requerido" junto a cualquiera que necesite estar allí. Por ejemplo, si su clase se ajusta al protocolo delegado UITableViewDataSource, se requieren -tableView:cellForRowAtIndexPath: y -tableView:numberOfRowsInSection:.

 6
Author: Zev Eisenberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-27 03:09:08

Comprueba el prefijo projectname.archivo pch. Me dejé llevar allí e importé algo que no debería haber hecho, y eso hizo que pareciera que el único protocolo que estaba implementando en esa clase no estaba implementado, cuando en realidad lo estaba. Solo sigue adelante y asegúrate de no incluir ningún protocolo allí.

En mi caso fue porque el archivo que no debería haber importado era otro archivo de protocolo , que no estaba directamente relacionado con la clase donde estaba recibiendo el advertencia.

También cuando limpie su prefijo* -.archivo pch, asegúrese de cerrar y volver a abrir Xcode. Tuve que hacer eso para que lo llevaran.

Espero que esto ayude!!

 0
Author: jpswain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-14 06:19:47

Compruebe su archivo de implementación para ver si ha incluido el allí. Si tienes ese bit, necesitas eliminarlo.

 0
Author: Rashid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-15 06:03:49