Pregunta

Soy muy nuevo en el desarrollo de cacao y estoy intentando cargar una ventana.Te explicaré mi problema.

Cuando el usuario hace clic en el elemento del menú, uso el siguiente código para cargar mi ventana

if ( !cadastroContasController )
{
    cadastroContasController = [[cadastroContas alloc]init];
    [cadastroContasController SetMenuItem:sender];
}
if ( ![[cadastroContasController window] isVisible] )
{
    NSLog(@"!isVisible");
    [cadastroContasController showWindow:nil];
}

En mi clase catastroContas se ve así:

@interface cadastroContas : NSWindowController 
{
    NSMenuItem *mnuCommand;
    IBOutlet NSComboBox *cmbSelecao;
    IBOutlet NSTextField *txtNome;
    IBOutlet NSTextField *txtSaldoInicial;
    IBOutlet NSTextField *txtAnotacoes;
}


- (void)windowDidBecomeKey:(NSNotification *)notification;
- (BOOL)windowShouldClose:(id)sender;
- (void)windowWillClose:(NSNotification *)notification;
- (void)SetMenuItem:(NSMenuItem*) menu;
- (NSMenuItem*) MenuItem;

@end

y la implementación es

@implementation cadastroContas

-(void)windowDidLoad
{
NSLog(@"windowDidLoad");
[mnuCommand setState:NSOnState];
}

-(id)init
{
    self = [super initWithWindowNibName:@"cadastroContas"];
NSLog(@"Init self=%p", self);
return self;
}
-(void)dealloc
{
NSLog(@"Dealoc=%p", self);
[super dealloc];
}

- (void)windowDidBecomeKey:(NSNotification *)notification
{
NSLog(@"windowDidBecomeKey window=%p", [self window]);
}

- (BOOL)windowShouldClose:(id)sender
{
NSLog(@"windowShouldClose Window=%p", [self window]);
NSLog(@"mnuComando=%p GetMenuItem=%p", mnuCommand, [self MenuItem] );
if ( mnuCommand )
{
    [mnuCommand setState:NSOffState];
}
return YES;
}

- (void)windowWillClose:(NSNotification *)notification
{

NSLog(@"windowWillClose  Window=%p", [self window]);
NSLog(@"mnuCommand=%p GetMenuItem=%p", mnuCommand, [self MenuItem] );   
[self dealloc];
}

- (void)SetMenuItem:(NSMenuItem*) menu
{
mnuCommand = menu;
}

- (NSMenuItem*) MenuItem
{
    return mnuCommand;
}

@end

Cuando hice clic en el menú, recibí dos mensajes "Init" y no sé por qué.Ejemplo:

[2223:a0f] Init self=0x10014fe40
[2223:a0f] Init self=0x10011f5a0

El segundo mensaje deja que el "[cadastroContasController SetMenuItem:sender];" inútil.

Entonces, necesito ayuda para entender qué está pasando.

Otra cosa, [[cadastroContasController window] siempre esta regresando NULL(0x0)!!, pero dentro de mi controlador puedo manejarlo (no es nulo).

¿Fue útil?

Solución

Esto significa que inició dos instancias, como lo muestra su registro del self puntero:Observe que el valor es diferente entre los dos mensajes.

Puede usar el instrumento Asignaciones en Instrumentos para ver qué causó que se creara una instancia de cada controlador de ventana.

Por lo general, este problema ocurre cuando crea uno de estos en la plumilla y el otro en el código.En el caso de un controlador de ventana, el que cree en el código debe ser el propietario de su plumilla;no debes crear otro controlador de ventana como un objeto en la plumilla.

Otra cosa, [[cadastroContasController window] siempre esta regresando NULL(0x0)!!, pero dentro de mi controlador puedo manejarlo (no es nulo).

El controlador de ventana cuyo window La salida que configuró en la ventana es la que regresa sinnil.El controlador de ventana cuyo window La salida que no configuraste es la que regresa. nil.

Siguiendo lo que dije anteriormente, después de eliminar el controlador de ventana que creó en la plumilla, debe conectar el propietario de su archivo. window salida a la ventana.

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