NSWindowController: LOADWINDOW ventana de cargas a partir de cacao, pero SHOWWINDOW: no hace nada
-
30-09-2019 - |
Pregunta
Tengo una subclase llamada NSWindowController _PreferencesWindowController
con la siguiente aplicación -
@synthesize window;
- (id)init {
self = [super initWithWindowNibName:@"PreferencesWindow"];
if (!self) return nil;
return self;
}
Y he intentado mostrar en la ventana _PreferencesWindowController
utilizando el siguiente código -
_preferencesWindowController = [[_PreferencesWindowController alloc] init];
[_preferencesWindowController showWindow:nil];
No hace nada, y he comprobado _preferencesWindowController.window
es nil
desde el depurador.
Sin embargo, si I loadView
llamada en _preferencesWindowController
la ventana puede ser cargado y es visible; _preferencesWindowController.window
ya no es nula de valor -
[_preferencesWindowController loadWindow];
Miré a la documentación de Apple en NSWindowController específicamente dice "nunca se debe invocar directamente loadWindow
", en lugar showWindow:
debe ser usado. Me pregunto lo que podría haber perdido que resultó en el comportamiento mencionado anteriormente he estado viendo.
Solución
Aceptar que resuelve esto mirando el archivo de cabecera NSWindowController
.
El problema está en mi archivo de cabecera para _PreferencesWindowController -
@interface _PreferencesWindowController : NSWindowController <NSToolbarDelegate> {
NSWindow *window;
}
@property (assign) IBOutlet NSWindow *window;
@end
Al eliminar la declaración @property y el cambio de Ivar NSWindow *window
a IBOutlet NSWindow *window
, método showWindow:
ahora trabaja sin ningún inconveniente.
La declaración de propiedad debe haber dado lugar a un comportamiento no definido en el método showWindow:
en la implementación del NSWindowController
.