alvarofrutos
Newbie

Posts: 1
|
 |
« on: July 09, 2009, 03:21:54 PM » |
|
Hola y gracias de antemano:
He leído los Cursos Cocoa publicados en MacWorld y he seguido todos los pasos hasta que me he atascado justo antes de la parte de las imágenes, cuando se prueba la aplicación. Creo que en el capítulo V hay algún error ya que la clase creada en el capítulo II aparece como "Person", en vez de como "Persona". Todos los otros términos definidos en la clase del capítulo II aparecen en inglés, como "familyName1" en vez de "segundoApellido" e incluso la NSMutableArray *personas aparece como NSMutableArray *persons. De igual manera la NSView definida en el capítulo I aparece como NSImageView.
Omitiendo estos errores he escrito el código siguiendo los pasos marcados, pero a la hora de compilar el programa obtengo varios errores. Me dice que la función Persona no está definida. He mirado un poco por internet y en algunos sitios, antes de la interface, llaman a la clase con: #import "laClaseCorrespondiente.h". Sin embargo en otros ejemplos no lo hacen. No sé por que obtengo ese error, a si que envío el código de mi programa. Agradecería enormemente cualquier ayuda o un código para poder compararlo.
Por cierto, si añado esa línea antes de la interface (#import "Persona.h"), al ejecutar el programa y dar el botón + la aplicación se cuelga y sale con el error: "objc_msgSend"
El código lo envío con los nombres de los objetos de la clase "Persona" en español, espero que no suponga ningún problema.
Muchas gracias por el artículo a Geppy Parziale.
AppController.h:
#import <Cocoa/Cocoa.h>
@interface AppController : NSObject { IBOutlet NSTextField *name; IBOutlet NSTextField *surname1; IBOutlet NSTextField *surname2; IBOutlet NSTextField *dateOfBirth; IBOutlet NSTextField *nationality; IBOutlet NSView *imageView; //Aquí dejo el IBOutlet como NSView, en vez de NSImageView. IBOutlet NSTableView *tableview; NSMutableArray *personas; BOOL isMale; }
@property (nonatomic, retain) IBOutlet NSTextField *name; @property (nonatomic, retain) IBOutlet NSTextField *surname1; @property (nonatomic, retain) IBOutlet NSTextField *surname2; @property (nonatomic, retain) IBOutlet NSTextField *dateOfBirth; @property (nonatomic, retain) IBOutlet NSView *imageView; @property (nonatomic, retain) IBOutlet NSTextField *nationality;
- (IBAction)addPerson:(id)sender; - (IBAction)choseSex:(id)sender; - (IBAction)removePerson:(id)sender; - (IBAction)openPanel:(id)sender;
@end
AppController.m:
#import "AppController.h"
@implementation AppController
- (id) init { self = [super init]; if (self != nil) { personas = [[NSMutableArray alloc] init]; } return self; }
- (void) dealloc { [personas release]; [name release]; [surname1 release]; [surname2 release]; [dateOfBirth release]; [nationality release]; [super dealloc]; }
@synthesize name; @synthesize surname1; @synthesize surname2; @synthesize dateOfBirth; @synthesize imageView; @synthesize nationality;
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { return [personas count]; }
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { NSString *identifier = [aTableColumn identifier]; Persona *p = [personas objectAtIndex:rowIndex]; return [p valueForKey:identifier]; }
- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { NSString *identifier = [aTableColumn identifier]; Persona *p = [personas objectAtIndex:rowIndex]; [p setValue:anObject forKey:identifier]; }
- (IBAction)addPerson:(id)sender { Persona *person = [[Persona alloc] init]; person.nombre = [name stringValue]; person.primerApellido = [surname1 stringValue]; person.segundoApellido = [surname2 stringValue]; if (isMale) person.sexo = @"H"; else person.sexo = @"M"; person.fechaDeNacimiento = [dateOfBirth stringValue]; person.nacionalidad = [nationality stringValue]; person.nombreImagen = @""; [personas addObject:person]; [person release]; [name setStringValue:@""]; [surname1 setStringValue:@""]; [surname2 setStringValue:@""]; [dateOfBirth setStringValue:@""]; [nationality setStringValue:@""]; [tableview reloadData]; }
- (IBAction)choseSex:(id)sender { switch ([[sender selectedItem] tag]) { case 0: isMale = YES; break; case 1: isMale = NO; break; } }
- (IBAction)removePerson:(id)sender { NSIndexSet *rows = [tableview selectedRowIndexes]; [personas removeObjectsAtIndexes:rows]; [tableview reloadData]; }
@end
Persona.h:
#import <Cocoa/Cocoa.h>
@interface Persona : NSObject { NSString *nombre; NSString *primerApellido; NSString *segundoApellido; NSString *sexo; NSString *fechaDeNacimiento; NSString *nacionalidad; NSString *nombreImagen;
}
@property(retain, nonatomic) NSString *nombre; @property(retain, nonatomic) NSString *primerApellido; @property(retain, nonatomic) NSString *segundoApellido; @property(retain, nonatomic) NSString *sexo; @property(retain, nonatomic) NSString *fechaDeNacimiento; @property(retain, nonatomic) NSString *nacionalidad; @property(retain, nonatomic) NSString *nombreImagen;
@end
Persona.m:
#import "Persona.h"
@implementation Persona
@synthesize nombre; @synthesize primerApellido; @synthesize segundoApellido; @synthesize sexo; @synthesize fechaDeNacimiento; @synthesize nacionalidad; @synthesize nombreImagen;
@end
|