Când să folosiți metodele awakeFromNib, initWithWindow, windowDidLoad?

Îmi puteți explica când trebuie să folosim metodele? și, de asemenea, în ce fel de situație ar trebui să folosim ce metodă? Chiar acum am test care funcționează și care folosesc asta (da, eu sunt un incepator) .. Mulțumiri. Sunt în curs de dezvoltare pentru MAC.

0

2 răspunsuri

În primul rând, nu ar trebui să sunați niciodată awakeFromNib și windowDidLoad. Le puteți implementa în clasele dvs. personalizate, iar apoi Cocoa îi va suna la momentul potrivit.

awakeFromNib funcționează pentru toate obiectele încărcate dintr-o arhivă de nib, nu doar ferestre și controlori de ferestre. Este un loc bun pentru a face configurare - este sigur (sunteți garantat că obiectul este încărcat complet, sa întors de la apelul său inițial și are toate setările sale), dar încă destul de devreme.

windowDidLoad (și windowWillLoad) funcționează pentru toate ferestrele, fie că sunt încărcate dintr-o arhivă de nișă, fie că sunt create în zbor. Dar nu se cheamă pe fereastră, se cheamă pe controlerul ferestrei. (De obicei, nu creați propria subclasă NSWindow, dar creați propria subclasă NSWindowController.) Dacă aveți un cod de configurare care depinde de fereastra care este încărcată, ar trebui să o puneți aici (dar de fapt nu este atât de critică în simpla , deoarece imediat ce încercați să accesați proprietatea ferestrei, va fi creată).

initWithWindow: este ceva ce te numești, dar un programator de cacao de început probabil că niciodată nu vrea să facă acest lucru.

Probabil ar trebui să citiți câteva ghiduri care vin cu Xcode. Dacă doriți o aplicație bazată pe documente, începeți cu "Ghid de programare pentru aplicații bazat pe documente pentru Mac". Dacă doriți o aplicație de utilitate cu o singură fereastră, va trebui în continuare să aflați despre MVC și așa mai departe, astfel încât este posibil să doriți să creați mai întâi o aplicație bazată pe documente pentru a vă învăța mai întâi calea.

De asemenea, dacă doriți să înțelegeți succesiunea evenimentelor, suprascrieți fiecare mesaj pe care îl puteți adăuga și adăugați ceva asemănător NSLog (@ "% s", __FUNCTION__); și syslog-urile dvs. vor dezvălui totul.

0
adăugat
am avut un element de etichetă în bara de instrumente pe care am dorit să-l setați odată ce fereastra este deschisă pe baza ferestrei anterioare (obținerea unei valori despre starea utilizatorului de pe server). Am introdus prima metoda [label setStingValue] initWithWindow, apoi in windowDidLoad (clasa este o subclasa a NSWindowController) - nu a functionat, apoi in cele din urma am pus-o in awakeFromNib atunci a functionat - poate sa-mi explicati de ce sa intamplat asta ?
adăugat autor Gaurav_soni, sursa
Așa cum am spus, dacă doriți să înțelegeți ce se întâmplă, suprascrieți fiecare mesaj pe care vă puteți gândi (în mod ideal, în delegatul aplicației, fereastră, vizualizare etc., nu doar controlerul de ferestre) și adăugați un mesaj NSLog în fiecare și apoi veți vedea secvența de evenimente și apoi ar trebui să vă fie mai înțelept.
adăugat autor abarnert, sursa

În timpul NIB, procesul de ncarcare initWithWindow devine apelat imediat după ce fereastra dvs. este dezarhivată de la NIB. Acesta este locul unde se inițiază controlerul de ferestre. După finalizarea procesului de procesare a procesului de arhivare - înseamnă că controlerul de ferestre și elementele UIView sunt gata - awakeFromNib este apelat. Înainte de acest punct, nu aveți nici o fereastră de control sau întregul proces de arhivare nu este finalizat.

Când faceți [label setStingValue] în awakeFromNib , controlerul de ferestre este gata, de asemenea, obiectul dvs. de vizualizare și contextul asociat sunt gata.

0
adăugat