Pregunta

Tengo el siguiente código:

@interface AXWindowController : NSWindowController {
IBOutlet NSTextField *text;
IBOutlet NSTextField *otherText;
}

- (void) setText: (NSString *)input;
- (void) setOtherText;

@end

@implementation AXWindowController

- (void) setText: (NSString *)input
{
    [text setStringValue:input];
}

- (void) setOtherText
{
    [otherText setStringValue:@"nag"];
}

@end

Y cuando corro:

1. [controller showWindow:nil];
2. [controller setText:@"lol"];
3. [controller setOtherText];

La línea 3 se ejecuta correctamente, pero la línea 2 no hace nada. De hecho, cuando miro texto y otherText en GDB durante la ejecución de las líneas 2 y 3, consigo los siguientes resultados:

(gdb) p text
$1 = (NSTextField *) 0x0
(gdb) p otherText
$2 = (NSTextField *) 0x1385d1e0

Lo que está pasando? No puedo pasar en la variable de entrada para una función para un conjunto NSTextField? ¿Por qué mi NSTextField convirtiendo nula cuando cambio los parámetros de la función set?

¿Fue útil?

Solución

Es bien sabido tema KVC.

Cuando la carga de su cacao SEMILLA a las conexiones de los enchufes de conexión diseñados en IB, se buscará la moda. Por lo tanto, se llama setText: con NSTextField * objeto mientras se carga. Debido a que su código no está listo para aceptar diferentes tipos de objetos ... primero para la salida de configuración, la segunda para establecer su valor de texto interno ... su salida permanecerá igual a nil .

Todas las llamadas a cero -. No hace nada

Solución: Cambiar nombre nombre de la variable de salida o métodos setter / getter de cambio de nombre sea diferente de KVC notación ...

Otros consejos

Para obtener las respuestas obvias, molestos fuera del camino, ¿estás seguro de que ha conectado que IBOutlet en Interface Builder? ¿Cuándo tratando de establecer las líneas de texto - lo haces en -awakeFromNib

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