Pregunta

Tengo una aplicación Cocoa simple usando una subclase NSWindowController. En la punta Tengo conjunto:

  • clase del propietario del archivo a mi NSWindowController subclase
  • La salida de 'ventana' del propietario del archivo a la NSWindow principal en la punta.

El método init de mi subclase NSWindowController se llama (que llamo súper), pero no importa que haga el windowDidLoad nunca es llamado.

Debo estar perdiendo algo obvio, pero para la vida de mí no puedo entender lo que es.

¿Fue útil?

Solución

Usted está tratando de crear la instancia de NSWindowController instanciándola en otra semilla. Sin embargo, cuando se instancia un objeto en un archivo semilla, se inicializa llamando -initWithCoder:.

-initWithCoder: no es un inicializador designado de NSWindowController, por lo que la instancia de NSWindowController en realidad nunca carga su plumín.

En lugar de crear instancias de la instancia NSWindowController colocándolo en el archivo MainMenu.xib en Interface Builder, crear mediante programación:

En AppDelegate.h :

@class YourWindowController;
@interface AppDelegate : NSObject
{
    YourWindowController* winController;
}
@end

En AppDelegate.m :

@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification*)notification
{
    winController = [[YourWindowController alloc] init];
    [winController showWindow:self];
}
- (void)dealloc
{
    [winController release];
    [super dealloc];
}
@end

En YourWindowController.m :

@implementation YourWindowController
- (id)init
{
    self=[super initWithWindowNibName:@"YourWindowNibName"];
    if(self)
    {
        //perform any initializations
    }
    return self;
}
@end

Otros consejos

Es perfectamente posible crear una instancia del controlador de ventana a través de una punta. En lugar de utilización windowDidLoad como su gancho, en ese caso usted querrá usar awakeFromNib.

La ventana puede ser cargado en la demanda - intente enviar window a sí mismo en -init. Ver la discusión de -[NSWindowController loadWindow] en la documentación para obtener más información.

Si usted escribió

TTEst *test3 = (TTEst *)[[NSWindowController alloc] initWithWindowNibName:@"TTEst"];

tratar vez

TTEst *test3 = [[TTEst alloc] initWithWindowNibName:@"TTEst"];

que hace la diferencia! Por supuesto, la primera línea fue un error ...

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