2011-07-12 10 views
5

Estoy al principio de una aplicación bastante simple (no realmente en el objetivo C todavía) con una NSWindow que contiene un NSTextField. El appdelegate.h tiene esta:NSTextField no setStringValue

NSWindow *window; 
NSTextField *userIDText; 

@property (nonatomic, retain) IBOutlet NSWindow *window; 
@property (nonatomic, retain) IBOutlet NSButton *nextButton; 
@property (nonatomic, retain) IBOutlet NSTextField *userIDText; 

la AppDelegate se conecta en el Interface Builder a la ventana y el campo de texto y luego en el archivo .m:

@synthesize userIDText; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    [userIDText setStringValue:@"user"]; 
    NSLog(@"UserIDTextString: %@", [userIDText stringValue]); 

(Me trataron también otras cosas que @ "usuario" como cadena) El registro solo muestra (nulo) y el campo de texto no cambia. ¿Qué estoy haciendo mal? Busco en los internets durante aproximadamente 5 horas y obviamente es algo realmente muy simple que echo de menos.

+2

es su conjunto de salida? establecer un punto de interrupción para asegurarse de que userIDText no sea nulo –

+0

Lo hice antes y solo quería escribir "seguro, como dije, los conecté en Interface Builder", pero luego lo revisé y no fue así. Tal vez hice algo más mal en primer lugar y luego, al tratar de solucionarlo, desactivé los puntos de venta nuevamente. Thx para darme una pista en la dirección correcta :) – Andreas

Respuesta

2

Se llama al método applicationDidFinishLaunching antes de que se cargue la ventana. Es por eso que NSLog(@"UserIDTextString: %@", [userIDText stringValue]); imprime nulo y no puede establecer el valor del campo de texto. Intente utilizar el método awakeFromNib.

+2

Suponiendo que tanto la ventana como la instancia del delegado de la aplicación que recibe este mensaje '-applicationDidFinishLaunching:' están en el archivo de punta principal, si el delegado de la aplicación está recibiendo el '-applicationDidFinishLaunching: 'mensaje, eso significa que el archivo nib * debe * ya estar cargado. En otras palabras, '-awakeFromNib' se envía primero, luego' -applicationWillFinishLaunching: ', luego' -applicationDidFinishLaunching: '. – NSGod

+0

Como dice NSGod, no funciona con awakeFromNib (lo intenté). – Andreas

1

Acabo de encontrar su pregunta ya que tuve el mismo problema. El problema era que si creas una ventana con botones y cosas en el "MainMenu.xib" previamente creado, no conectas todo a "File's Owner" sino al objeto "App Delegate" generado por separado en el lado izquierdo.

Estoy bastante seguro de que ya ha solucionado el problema. Pensé que podría ser útil para otra persona que tenga el mismo problema.

¡Un cordial saludo!

Cuestiones relacionadas