2009-05-13 9 views
9

Ho un file NIB che carico utilizzando NSWindowController initWindowNibName. Il file NIB contiene una NSWindow. Il proprietario del file è di classe NSWindowController. Ho collegato la presa della finestra dal proprietario del file alla finestra.Il caricamento del file NIB tramite NSWindowController non imposta oggetti di finestra o di livello superiore

Quando carico NIB, [windowController window] è nullo, così come l'array di oggetti di livello superiore. Tuttavia, posso ancora chiamare [windowController showWindow: nil] e mostrare correttamente la finestra.

Qualcosa non sembra proprio qui. Ho confermato le connessioni e il proprietario del file è OK. Infatti, quando guardo il valore _owner dell'istanza windowController nel debugger, lo vedo puntare su se stesso come mi aspetto.

Qualche suggerimento su cosa potrebbe succedere?

Grazie!

risposta

6

Quando dici che [windowController window] è zero, come lo stai determinando? Il NIB non viene effettivamente caricato fino al -window viene chiamato per la prima volta. Quindi se stai cercando nel debugger vedrai _window come zero fino a quando non chiami showWindow:. Successivamente, _window dovrebbe avere un valore diverso da zero.

+0

Sì, hai ragione. Stavo affermando che la finestra non era nulla prima che chiamassi [controller window]. Non sono ancora abituato a molto della "magia" che Cocoa fa per te sotto le coperte ... è più intelligente di me, o mi fa sembrare più stupido di quanto penso di essere. – psychotik

+1

Più a lungo sviluppo in Cocoa, più imparo quanto poca magia sia davvero (tranne KVO, il metodo swizzling è magico anche quando lo capisci). Il trucco non è affidarsi a dettagli di implementazione interni. Non dare per scontato che tu sappia cosa significa "finestra". Ha un trattino basso; non sono affari tuoi. Le interfacce pubbliche sono estremamente coerenti nei loro comportamenti. Non cercare di intrufolarti intorno a loro. In bocca al lupo! –

5

Hai sottoclassificato NSWindowController?

Quando faccio questo, io uso un NSWindowController chiamato MyWindowController e chiamo initWithWindowNibName: nel del init

E poi, impostare proprietario del file per puntare alla classe MyWindowController sottoclasse.

+3

Non è necessario sottoclasse NSWindowController. È permesso, ma non richiesto, e non dovrebbe risolvere il problema di psychotik. –

+1

Sia PH che Abizern hanno ottenuto il credito per risolvere il mio problema. – user523234

+0

@ user523234, grazie a loro e al richiedente nel mio caso per risolvere il mio problema !!! – Mazyod

Problemi correlati