2012-11-29 14 views
11

Così sto cercando di aprire un nuovo NSWindow in questo modo:NSWindowController ShowWindow: lampeggia la finestra

NSWindowController *winCon = [[NSWindowController alloc] initWithWindowNibName:@"NewWindow"]; 
[winCon showWindow:self]; 

Quando faccio questo, i nuovi lampeggia finestra sullo schermo, come in esso appare e poi scompare rapidamente . So che ho la mia finestra correttamente referenziata in IB e tutto. È come se volesse mostrare la finestra, ma poi viene deallocato o qualcosa di strano quasi immediatamente. Qualsiasi aiuto sarà apprezzato.

risposta

17

Innanzitutto, il nome dell'inizializzatore non è -initWithNibName:, ma -initWithWindowNibName:.

In secondo luogo, e questo è vero se si sta utilizzando ARC, la finestra non funziona perché non si dispone di un riferimento valido per l'istanza di NSWindowController. Quando il metodo finisce, anche il tuo riferimento.

Se, per esempio, si dovesse fare questo, invece nell'applicazione di interfaccia delegato:

@property(strong) NSWindowController *winCon; 

e sintetizzato nel vostro file di implementazione:

@synthesize winCon; 

allora si potrebbe configurare come questo:

self.winCon = [[NSWindowController alloc] initWithWindowNibName:@"NewWindow"]; 
[self.winCon showWindow:self]; 

Ora la finestra non scomparirà. Il controller della finestra verrà rilasciato quando l'applicazione si chiude.

+0

Che ha funzionato perfettamente! Ho pensato che abbia a che fare con qualcosa del genere, ma non sapevo come risolverlo. Grazie mille. –

+0

Sei il benvenuto. – trudyscousin

+0

Probabilmente una delle migliori spiegazioni che ho sentito. Ottimo esempio di come funziona ARC quando non si fa riferimento alla proprietà delle variabili ... Grazie! –

Problemi correlati