Aprendiendo Cocoa

Instanciar clases en Interface Builder 3.0

Marzo 15th, 2008 por admin

Uno de los cambios que todos me comentais es como instanciaís una clase en Xcode 3, ya que desde Leopard el modo de realizar esta acción ha cambiado.
Antes si queriaís realizar un proyecto, teniamos que crear una Subclase de NSObject desde el Interface Builder, ¿recordaís?. Pues para enfatizar el uso del patrón MVC (modelo-vista-controlador) y mejorar la integración entre Xcode e Interface Builder, ahora debemos realizarlo tal y como sigue:

1) En la libreria de Cocoa, seleccionamos un objeto NSObject
nsobjectinlibrary.png

2) La arrastramos a nuestra Document Window, creando asi una instancia de NSObject
documentwindowstart.png

3) Seleccionamos la instancia de NSObject en nuestro Document Window y abrimos el Inspector(mayus-comando-I) y nos vamos a la sexta pestaña, Identity, y en Class comenzamos a escribir el nombre de nuestra clase en Xcode, en el ejemplo empezamos con App e IB nos completa el texto. Ahora con la integración de Xcode, vemos como tenemos todos los Outlets y Metodos de nuestra clase para poder utilizarlos, e incluso podemos añadir nuevos, y actualizar los archivos.
identityinspector.png

En resumen:
1. Crea tu clase en Xcode.
2. Vete a IB e instancia un objeto de NSObject desde la libreria.
3. Cambia en la pestaña Identity, el nombre de la subclase a tu clase creada antes.
4. Añade outlets, actions, o realiza conexiones entre la interfaz y el archivo cabecera de tu c clase (.h)

Posteado en Cocoa

7 Respuestas

  1. kakebuke

    Puafff

    Estoy liado con esto del Xcode y me pierdo. Queria empezar haiendo lo del contador de caracteres, pero tengo Leopard y no consigo arrejuntar lo que escribes en este post con lo del contador de caracteres. Supongo que es algo que hago mal, pero, cuando en el Xcode antiguo le decias que te creara la clase y te hacia todo ese trabajo, ahora como lo haces? con el Write Class files? esque me crea unos archivos que no aparecen en Xcode a menos que los “invites” o los añadas manualmente. Esto lo hago bien o mal?

  2. jaco

    No se si ayuda, pero yo lo que hago es lo siguiente.

    i. Creo la clase en XCode
    ii. Abro el .nib
    iii. Instancio un NSObject y le doy el nombre de la clase creada en i.
    iv. Hago los outlets y actions
    v. Hago las conexiones interfaz-Objeto
    vi. Salvo el proyecto en IB (.nib)
    vii. Sobrescribo las clases (Write Class)

    Si mal no entiendo, cualquier cambio de interfaz (conexiones, botones, etc…) están recogidas en el .nib, mientras que si añades cualquier otro outlet o action, será necesario hacer un merge al escribir las clases, ya que estamos añadiendo métodos nuevos…

    Es mas o menos asi? Al menos a mi así me funciona

    gracias por el blog, es perfecto

  3. Ale

    Hola a todos:
    kakebuke, estoy preparando una remodelacion del cuentacaracteres para Leopard, no te preocupes si te atascas.
    jaco, entiendes perfectamente la integración y la conexion entre Xcode e IB. Es el mismo metodo que explico, salvo que uno es digamos “manual” y otro “automatico”. Siempre es util saber utilizar los dos, ya que tu ejemplo es muy bueno para el primer paso en la creación de la interfaz, y el nuestro ayuda al tuyo, si añades un outlet a ultima hora, puedes pedirle que lea de las modificaciones del Xcode con Read Files, y veras los outlets.Pues eso, que muchas gracias,sirve de mucha ayuda.

    Muchas gracias a los dos

  4. Jose maria

    Hola. solo quería decirte que he descubierto tu blog hace tan solo unos días y me leído todas las entradas… me parece genial, ya que he intentado empezar con xcode muchas veces pero he desistido por no encontrar apoyo para principiantes en el mundo de la programación para mac.. animo y espero publiques muchas mas entradas

  5. XCode 3 « Programación Cocoa

    […] Con el nuevo ordenador ha venido Leopard y el nuevo Xcode. En Leopard nada especial, mucho diseño, algunas cosas muy útiles, pero en general nada extraordinario. Junto con Leopard también he tenido que instalar el nuevo XCode 3. Como sigo muy liado con mis obligaciones todavía no he podido trabajar en serio con el programa, pero la primera impresión es muy buena. Parece cada ve más sencillo, limpio y potente. Cambian varias cosas, alguna de ellas bastante importante como explica muy bien Alejandro Moreno en su blog Cocoa con leche: Instanciar clases en Interface Builder 3.  […]

  6. idenjoe

    Hola chicos. Llevo ya varias semanas aprendiendo Cocoa/Objective-C. No había trabajado nunca con objetos y la verdad que se me esta poniendo cuesta arriba la cosa. Os explico: sigo un libro oficial de Apple que se llama Learning Cocoa With Objective-C, en el cual vienen ejemplos de lo que se explica en cada tema con su código correspondiente. Hoy he estado haciendo una aplicación muy sencillita que tiene una custom view y dos controles, un slider y un boton para cambiar color de un objecto. La aplicacion lo que hace es dibujarme un circulo. Con la barra slider cambio el tamaño y con el boton pues cambio el color del circulo. Hasta aqui bien. Ahora viene lo que me preocupa porque vengo de programación estructural y no le veo la lógica.

    En el ejemplo define e implementa algunos métodos que si los comentas o no, implementan algunas funciones de la aplicación, y justo aquí viene mi duda. Si en el programa principal main.m la unica instrucción que hay es:

    return NSApplicationMain(argc, (const char **) argv);

    ¿Quién llama a esas funciones/métodos? y lo mejor de todo y suponiendo que en el .nib del proyecto se llamen a esas funciones, a la hora de implementar los métodos de mi aplicación ¿Como se a que a cuáles llama desde ese .nib????

    No se si me he explicado muy bien pero espero que me ayudeis porque tengo un Cacao que no me encuentro jeje

    Un saludo.

  7. Rafa

    idenjoe: Creo que deberías repasar los conceptos que caracterizan la programación orientada a objetos, en este caso especialmente la herencia y la sobrecarga. Te será más fácil entender lo que planteas y te sacará de este lío que tienes.

    Saludos

Animate a dejar un comentario

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.