Aprendiendo Cocoa

Aplicacion CuentaCaracteres, parte 2

Octubre 2nd, 2007 por admin

Tutorial creado con Xcode 2
Perdón por el retraso, pero un descanso post-examenes me ha dejado bastante desconectado de internet. Espero ser un poco mas constante desde este momento. De vuelta al tajo, continuamos con CuentaCaracteres y para los que no sepáis de lo que estamos hablando, leed este anterior post. Si recordáis por donde nos quedamos, seguro que terminasteis de hacer esto

Y como respuesta a esta acción, Interface Builder nos ofrece guardar los archivos creados para la clase Controlador en el mismo directorio del proyecto. Elegimos guardar, para que el sistema cree dos archivos Controlador.h y Controlador.m, cuyo contenido explicaremos en la segunda parte de este tutorial.


Si hemos hecho ya este ultimo paso, tendremos en Interface Builder nuestra interfaz gráfica, la que ya está completa y no es necesario tocarla mas, luego salvamos y si sois unos “manazas” como yo, cerrar el programa, para evitar catástrofes mayores.

Entonces, nos vamos a Xcode, y si hemos realizado el ultimo paso correctamente, deberíamos tener nuestros archivos .h y .m de la clase Controlador, dentro de la carpeta Other Sources. Como opción, hay desarrolladores que mueven estos dos archivos a la carpeta Classes, nosotros de momento, no los movemos.
im003.jpg

Estos archivos son la cabecera y la implementación de nuestra clase, que gracias a Xcode e IB, están casi completos, indicando las conexiones Outlets y la Action Contar, listas para nosotros completarlas. En este punto, vuestro archivo Controlador.h debería tener este contenido.

@interface Controlador : NSObject
{
IBOutlet NSTextField *entrada;
IBOutlet NSTextField *salida;
}
- (IBAction)Contar:(id)sender;
@end

Y también, nuestra implementación Controlador.m así:
#import "Controlador.h"
@implementation Controlador
- (IBAction)Contar:(id)sender
{
}
@end

Si de este código no entendéis algo, os recomiendo leer los anteriores posts sobre Objetive-C, ya que lo siguiente os puede sonar a chino. El archivo cabecera (.h) está perfecto, no lo vamos a tocar, solo vamos a completar la implementación de la Action Contar.

Básicamente, debemos contar el numero de caracteres del Outlet Entrada, y comunicarselo al de Salida. Estas operaciones se realizan así en ObjetiveC.
- (IBAction)Contar:(id)sender
{
int count = [[entrada stringValue] length];
[salida setStringValue:[NSString stringWithFormat:@" %d caracteres",count]];
}

La primera linea, toma la longitud del valor como String de Entrada, y la segunda, le asigna a salida el valor de un NSString construido con formato “%d caracteres”, reservando espacio en memoria para count con el símbolo %d. Es muy común al trabajar con NSTextField, utilizar las operaciones stringValue y setStringValue, ya que nos permiten recuperar y asignar valores a los mismos.
En este momento, podemos ejecutar la aplicación, y todo debería ir perfecto. Si tienes algún problema, mandame un email y entre todos lo intentaremos. Introduciendo una palabra o frase, y pulsando en Contar, obtendremos el numero de caracteres que consta.

Los que habréis llegado hasta este punto, os daréis cuenta que al empezar la aplicación, el texto de Salida siempre indica “System Font Text”, hasta la primera vez que contéis algún texto. Esto puede ser resuelto de dos maneras, como casi todo en la vida, una elegante y otra chapucera. La chapucera consiste en abrir de nuevo Interface Builder, seleccionar el contenido del NSTextField Salida, y borrarlo, con cuidado de que hayamos borrado el contenido y no el NSTextField. Y la elegante, consiste en introducir este método en Controlador.m
- (void)awakeFromNib{
[salida setStringValue:@"Introduzca una palabra"];
}

Este método, es llamado justo antes de que algún evento sea invocado, es decir, nos permite modificar algún comportamiento de nuestra interfaz antes de que sea observable.

Bueno, pues esto es todo, ya hemos terminado CuentaCaracteres, espero que os haya gustado programarla tanto como a nosotros explicarla. La próxima aplicación, va a ser una Calculadora y ya esta casi terminada. En la mismo, ya no iremos tan lento en explicar tantos detalles, pero trataremos tampoco de ir muy rápido.

Muchas gracias por leernos. Intenta este tutorial, ya que es muy sencillo.

Posted in Cocoa

6 Respuestas

  1. Manuel

    Muy bueno el tutorial, me ha servido de mucho!

  2. KLap

    Hola, de nuevo decirte que te sigo y el blog es muy bueno, estoy haciendo los tutoriales y de momento hasta aqui todo bien salvo una cosa. Cuando pico el metodo awakeFromNib, en el campo de texto al ejecutar la aplicación se corta la frase, vamos que solo aparece, Introduzca una, y se come palabra. A que puede deberse?

  3. admin

    Hola KLap:
    Se me paso comentar, que debeis redimensionar el NSTexTField, es decir, entra en Interface Buidler y selecciona el NSTextField y hazlo mas grande arrastrando uno de sus laterales. Ejecuta de nuevo y cuentanos.
    Gracias por tus comentarios

  4. KLap

    Perfec! Ya funciona como debe.

  5. JeanCarlovb

    Hola:
    Primero que nada, FELICIDADES !!!! esta genial y la forma de explicar simplemente PERFECTA !!!, solo que me trabe en un paso y me marca un error en el controlador.m en las dos lineas y otra cosa que vi es que en el .h el mio no dice numero ni texto, dice entrada y salida…
    Que hize mal ???

    Mil gracias ñ_ñ
    Felicidades una vez mas !!!

  6. Tadder

    Hola, muchas gracias por este tutorial, la cosa que te quiero solicitar es si lo puedes actualizar para el xCode 3.0 es que no encuentro mucho de relación y me confundo hehe, espero se pueda gracias

Animate a dejar un comentario

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