Pregunta

Estoy construyendo una aplicación de cacao y tengo una pregunta sobre el uso de controladores de ventana. La idea es que si el usuario selecciona nuevo en la barra de menú, se crea una instancia de MyWindowController, que es una subclase de NSWindowController y se muestra una nueva ventana de mywindow.xib.

Estoy manejando la acción en el delegado de la aplicación. Por lo que he visto después de buscar algo como lo siguiente se podría hacer. Una vez que se muestra la ventana, ya no tengo ningún motivo para almacenar un puntero al controlador de la ventana y, dado que la asigné, también la realice antes de mostrar la ventana.

[[[[MyWindowController alloc] init] autorelease] showWindow:self];

Dado que la ventana se lanza poco después, la ventana se mostrará brevemente en la pantalla y luego se irá. He encontrado una solución en la que conservo el controlador de la ventana en el método -window: y dejo que se libere una vez que reciba una notificación de ventana.

- (IBAction)showWindow:(id)sender
{
    [self retain];
    [[NSNotificationCenter defaultCenter] addObserverForName:NSWindowWillCloseNotification
                                                      object:self.window
                                                       queue:nil
                                                  usingBlock:^(NSNotification *note) {
                                                      [self release];
                                                  }];
    [super showWindow:sender];
}

¿Hay una mejor manera de hacer esto? He buscado en la documentación de Apple y no he encontrado nada sobre qué prácticas usar. Suena como algo muy básico que debería cubrir, así que tal vez solo estoy buscando con los términos equivocados.

¿Fue útil?

Solución

Normalmente se aferraría al controlador de la ventana y solo lo liberaría cuando haya terminado con él. Diría que su delegado de aplicación sería responsable de eso. Simplemente guárdelos en una matriz si puede haber múltiples. Si bien su solución puede funcionar, no es muy elegante.

Si está trabajando en una aplicación Cocoa basada en documentos, crea el controlador de la ventana en el método de subclase de documento MakeWindowControllers y deja que esa clase mantenga un puntero en el controlador de su ventana.

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