Xcode: ¿Es posible crear automáticamente stubs para los métodos requeridos por la interfaz de protocolo?


Viniendo de un fondo Eclipse / Java, una de mis características favoritas es la capacidad de stub rápidamente todos los métodos requeridos por una interfaz. En Eclipse, puedo elegir 'Override / implement' desde el menú fuente para generar métodos stub para cualquier método de la Interfaz.

Me gustaría hacer lo mismo en Objective-C. Por ejemplo, si declaro una clase que implementa el protocolo' NSCoding', me gustaría que Xcode generara automáticamente los métodos necesarios para implementar este Protocolo. Es frustrante tener que buscar y luego copiar / pegar las firmas de los métodos requeridos de cada Protocolo que estoy tratando de implementar.

He estado tratando durante un tiempo para averiguar si esto es posible, pero no he encontrado nada prometedor todavía. Es esto posible en XCode?

Author: Dan Rosenstark, 2009-11-07

10 answers

Accessorizer escribirá los métodos de codificación y decodificación para ivars que se le pasen (protocolo NSCoding y para el archivado de documentos NSDocument). También generará constantes de cadena estáticas o #definir con un prefijo personalizado; copyWithZone:; y otras cosas si lo necesita - todo desde un simple acceso directo a través de Servicios o desde la barra de herramientas. Archivo con clave de accessorizer

 7
Author: Kevin,
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
2009-11-18 21:45:10

Creo que Accessorizer hará lo que quieras.

 8
Author: jessecurry,
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
2009-11-12 03:33:20

No es la respuesta directa, solo una pista:

Fuera de la caja XCode no puede.

Pero AppCode can.

Puede hacer esto automáticamente (con su permiso, por supuesto).

Si algunos métodos de protocolo marcados como @required - AppCode resaltará la implementación y sugerirá implementar estos métodos.

ejemplo

@optional métodos también disponibles para implementar automáticamente (atajo: control + I ).

 6
Author: skywinder,
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-01-15 01:32:04

Puede crear scripts para el elemento de menú de scripting en AppleScript, Perl, Python, Ruby o cualquier otro lenguaje de scripting que vaya en el menú de scripting.

Podría colocar el punto de inserción en el .m archivo y hacer que el script busque el correspondiente .archivo h. Localice los protocolos soportados y así sucesivamente...

MacTech publicó un artículo en 2007 Xcode Menu Scripts

 1
Author: Niels Castle,
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
2009-11-07 21:18:02

Xcode 3.2 autocompletará las implementaciones de métodos conocidos. En otras palabras, si el método se declara en algún lugar (por ejemplo, en un protocolo), cuando comience a escribirlo en a .m file, Xcode 3.2 autocompletará la firma del método por usted. Esto no es exactamente lo que pediste, pero es muy práctico.

 1
Author: Kevin Ballard,
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
2009-11-08 07:59:32

También estoy buscando una manera de generar stubs de métodos para los protocolos en mi archivo de encabezado. Eché un vistazo Accessorizer y parece ser una herramienta útil, pero a menos que me perdí algo que no encontré una manera de conseguir que para generar stubs método para un protocolo.

Eric, si encontraste otra solución por favor publica lo que encontraste. Es increíble para mí que XCode no tenga esto incorporado en el IDE.

 1
Author: Brad,
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
2009-11-24 21:03:41

Dado que el enlace dado por la respuesta aceptada ya no funciona (y se redirige a un anuncio), aquí está otra buena explicación sobre cómo usar accessorizer para crear stubs de métodos de protocolo.

 1
Author: pille,
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-11-25 13:16:45

Basado en el script ruby "Create @property, @synthesize & dealloc from Variable Declaration" de AllanCraig, hice uno para generar stubs de implementación a partir de interfaces: http://pastebin.com/4T2LTBh6

Cómo usar?

  • Configure el script en su XCode (Shell Script) y asígnele un atajo (por ejemplo, CMD+5).
  • Seleccione las líneas del archivo de interfaz en las que desea generar la implementación y presione la tecla de acceso rápido.
  • Su .m contendrá su métodos seleccionados.
 0
Author: AlfredBaudisch,
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
2010-08-23 18:07:08

Sé que esta es una pregunta antigua, pero si desea ver siempre las últimas definiciones, haga clic derecho en la clase en cuestión y Vaya a la Definición. Aquí lies todas las funciones actuales no obsoletas por lo que no está confiando en una tercera parte para mantenerse al día.

 0
Author: Mark McCorkle,
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
2013-04-23 13:23:42

En mi caso, el estilo me ayuda mucho, en cierto sentido resolvió mi problema.

Supongamos que tiene la siguiente declaración de método:

+(DBManager*)getSharedInstance;

Desde el archivo de implementación comienza a escribir + ge y xcode elegirá automáticamente el método

+(DBManager*)getSharedInstance;
 0
Author: Saleh Enam Shohag,
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
2016-03-04 06:24:13