En primer lugar, quiero reiterar mis disculpas hacia los usuarios de Leopard por los gazapos cometidos en la parte II de este tutorial. Gracias a un lector, Luis Paniagua (gracias de nuevo!), he encontrado un tutorial realmente bueno en inglés y lo he traducido y adaptado.
Así que esta vez sí: los pasos definitivos para Leopard (XCode 3.0)
- En tu proyecto de XCode, haz clic en Classes mientras pulsas Option y selecciona “Add File…”
- Elige “Objective-C Class” y ponle de nombre AppController.m. Asegúrate de que la casilla “Also create AppController.h” está marcada.
- Abre AppController.h y añade entre los corchetes el siguiente código:
IBOutlet NSTextField *clicks;
- Fuera de los corchetes escribimos el siguiente código:
- (IBAction)haceclick:(id)sender;
- Con estos dos últimos pasos, hemos definido el outlet y la acción a las que enlazaremos los objetos pertinentes de la interfaz. Ahora, abre AppController.m y añade las siguientes líneas de código entre @implementation y @end:
- (IBAction)haceclick:(id)sender
{}
- En XCode, abre la carpeta NIB Files de la lista en árbol de la izquierda y haz doble click en MainMenu.nib. El archivo se abrirá en Interface Builder.
- Cuando Interface Builder haya cargado, selecciona el objeto NSObject y arrástralo a la ventana MainMenu.nib (la ventana donde se encuentra First Responder, Application, MainMenu… en vista de iconos). Renómbralo a AppController.
- Abre el Inspector (Cmd-Shift-I). Haz click en tu objeto NSObject que renombraste como AppController y después haz click en la pestaña Identity del inspector.
- Cambia la clase al tipo “AppController”. Una vez hecho esto, si miras en los apartados Class Actions y Class Outlets, verás que clicks y haceclick: están disponibles.
- Haz Control-Click en File’s Owner en la ventana de MainMenu.nib (aquella a la que arrastramos nuestro NSObject tiempo ha) y arrastralo al objeto AppController. En el popup, selecciona la opción delegate.
- Ahora ve a la interfaz que creaste en la parte I del tutorial. Haz Control-Click en el botón y arrástralo a nuestro AppController. Selecciona haceclick: en el popup.
- Repite el paso 11 empezando a arrastrar en AppController y acabando en el campo de texto. Selecciona clicks en el popup.
- Ya hemos acabado! Los pasos 11 y 12 han enlazado los outlets y las acciones que creamos con código en XCode a la interfaz, a través de un controlador que une ambas partes: el objeto NSObject ligado a nuestro código a través de la clase.
Una vez hecho esto, pasemos a lo importante: el código.
Modificad vuestro archivo AppController.m para que quede así:
#import "AppController.h"@implementation AppController
- (void)awakeFromNib
{
[clicks setStringValue:@"0"];
}- (IBAction)haceclick:(id)sender
{
int numerodeclicks = [clicks intValue];
numerodeclicks++;
[clicks setStringValue:[NSString stringWithFormat:@"%d",numerodeclicks]];
}@end
Veamos que significa esta, aparentemente sin sentido, parrafada:
- #import AppController.h - “inserta” el contenido del archivo AppController.h.
- @implementation AppController - Inicia la implementación de la clase AppController. Se cierra con @end al final del archivo.
- - (void)awakeFromNib: - Esta acción determina los pasos a ejecutar al inicializarse la aplicación. Estos pasos están delimitados entre corchetes.
- [clicks setStringValue:@”0″]; - Esta linea llama al outlet clicks (nuestro campo de texto) a ejecutar su método setStringValue con el parámetro @”0″. El método setStringValue establece un nuevo valor en el campo de texto.
- - (IBAction)haceclick:(id)sender - Delimita entre corchetes los pasos a ejecutar cuando un elemento de la interfaz llame a la acción haceclick:
- int numerodeclicks = [clicks intValue]; - Crea la variable numerodeclicks de tipo entero (int) y establece que su valor sea igual al resultado de ejecutar el método intValue en el objeto clicks. El método intValue devuelve el valor de clicks como un entero.
- numerodeclicks++; - Aumenta el valor de numerodeclicks en 1.
- [clicks setStringValue:[NSString stringWithFormat:@”%d”,numerodeclicks]]; - Hace que el objeto clicks use el método setStringValue, estableciendo como valor de este método el resultado de ejecutar el método stringWithFormat correspondiente a la clase NSString con la propiedad @”%d”,numerodeclicks]]
Por último, seleccionad Build & Run. Esto compilará vuestro codigo y lo ejecutará.
El lunes empezaré con un nuevo tutorial más avanzado. Espero que hayáis disfrutado tanto con el tutorial como yo haciéndolo.
Cualquier duda, en los comentarios.
Etiquetas: cocoa, Interface Builder, objective-c, programación, xcode


Para hacer un trackback a este artículo, usa
Para seguir los comentarios de este artículo por RSS, usa 

10 comentarios
Hola, enhorabuena por el blog!
Una cosa, estos pasos son para Leopard exclusivamente? o se pueden aplicar al Tiger?
Gracias, un saludo
@Artus: Los pasos son para Leopard, pero lo del código es para ambos sistemas operativos. Los pasos para Tiger los encontrarás en la parte II del tutorial, que se publicó el miércoles.
estoy esperando al lunes.
un saludo
ufff, la verdad es que el “builder” me recuerda mucho al visual basic, en su momento fue una gran herramienta para desarrollar aplicaciones gráficas de escritorio aunque al final parece que se ha impuesto el lenguaje de programación java. Conozco java y me parece un lenguaje bastante sencillo de aprender y bastante limpio a la hora de codificar. He leído el código que habéis publicado y la verdad es que está llena de elementos que aparentemente no tienen sentido como [clicks setStringValue:@”0″]; esto en java quedaría como String clicks = “0″; Muchísimo mas simple de entender para cualquiera que haya programado alguna vez. La linea [clicks setStringValue:[NSString stringWithFormat:@”%d”,numerodeclicks]]; tampoco tiene desperdicio que traducido a java seria algo así como clicks = stringWithFormat( formato, numeroClicks); mucho mas intuitivo y sencillo. Como conclusión, me parece el que lenguaje utilizado para programar en mac cocoa u objective-c (el de este tutorial) es un poco enrevesado y complica la codificación , es poco intuitivo. No sé, es mi opinión. Las cosas cuanto mas sencillas mejor, quizás sea esa la razón de que triunfe java a nivel mundial. Aun así muchas gracias por el post, ;-))
…tengo un problema con lo de NIB Files, cuando le doy desplegar no me aparece el archivo MainMenu.nib, no se despliega nada, que debo de hacer?
@ups: Prueba a crear un nuevo proyecto y asegúrate de que eliges uno del tipo Cocoa Application. Si siguiera sin funcionar, crea un archivo con Interface Builder, llámale “MainMenu.nib” y ábrelo desde tu proyecto de XCode. Si tienes mas dudas o no consiguieras hacerlo funcionar, puedes contactar conmigo en santiago@somosunared.com si lo prefieres :)
pues no funciono nada de eso, cuando genero el archivo en InterfaceBuilder, no se abre desde el Xcode, creo que el problema radica, en que descargue la version beta de Xcode 3.1, y aun que ya lo actualiza me sigue sin dejar hacerlo. :(
Estupendo lo del método awakeFromNib. No había visto en otros tutos algo tan básico. Muchas gracias.
Tengo un pequeño problemita, en el paso 12, no me aparece clicks en el popup. ya repeti el proyecto y nada, uso leopard. Muchas gracias por tu tiempo. Excelente tutorial!!!!
Mil Gracias
Mil gracias, estaba cometiendo un grave herror, no lo hacia en la direccion correcta por eso no me aparecia. Lo siento!!!!