Pregunta

Soy un novato completa a Objective-C, que viene de un fondo de PHP, dialectos variados de BASIC, y un puñado de C / C ++. Mientras Siento que tengo un mango justo sobre la configuración de las ventanas básicas en Interface Builder, sin embargo, estoy teniendo problemas para manipular el contenido de los campos de texto, especialmente llamando valores de ellas y enviar los valores a ellos.

Estoy usando una plantilla básica de aplicación Xcode cacao sin extras, y ha creado una clase de cacao llamado "Controller.hy". En el Interface Builder que arme una ventana con un campo de texto seguro, un NSTextField básica en virtud del mismo, y un botón para enviar el formulario. Mi clase controlador es de esta manera:

//controller.h
#import <Cocoa/Cocoa.h>

@interface controller {
    IBOutlet id userInput;
    IBOutlet id userOutput;
}
- (IBAction)submitButton:(id)sender;
@end

//controller.m
#import "controller.h"

@implementation controller
- (IBAction)submitButton:(id)sender {
    NSBeep();
    [userOutput setStringValue: userInput];
    [userInput setStringValue:nil];
}
@end

Tengo userInput vinculado hasta el campo Texto segura y userOutput vinculada a la NSTextField. submitButton está vinculado al botón pulsador. Con base en mi comprensión de cómo funcionan las cosas, esto se debe asignar el valor del texto seguro en userInput a userOutput, actualizando así lo que se muestra en el NSTextField, y luego restablecer el campo. El pitido está ahí para que me haga saber si la función está siendo llamado.

El pitido no se va fuera, sin embargo, lo que significa que no está pasando nada. Interface Builder construye los archivos, sin embargo, así que sé que han sido definidos adecuadamente y están conectados a los lugares adecuados. ¿Cómo lo arreglo para que el IBAction ejecuta y los valores se envían a donde tienen que ser?

¿Fue útil?

Solución

Una forma más eficaz para ver si está siendo llamado es para establecer un punto de interrupción (doble click en la cuneta a la izquierda del editor) y depurar la aplicación en su lugar. La primera sugerencia es siempre a la cordura a comprobar sus conexiones.

Además, es probable que desee utilizar esta línea en su lugar:

[userOutput setStringValue:[userInput stringValue]];

(Tenga en cuenta que -stringValue se hereda de NSControl , al igual que es -setStringValue:.)


EDIT: Podría ayudar a asegurarse de que en realidad estás instancia del objeto controlador. Se puede añadir un método -awakeFromNib al controlador y poner un punto de interrupción en ella para ver si este es el caso. (Ver http://www.cocoadev.com/index.pl?AwakeFromNib ) Si ese método no está siendo llamado, entonces no se realizan las conexiones especificadas en el IB, tampoco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top