2009-06-03 16 views
6

Ho un controller di visualizzazione che viene creato tramite initWithNibName, e ho appena scoperto sveglioNon non è chiamato. WakeFromNib è chiamato solo quando il controller della vista non è archiviato dal pennino? (ovvero, initWithCoder viene chiamato)awakeFromNib non viene chiamato nel mio ViewController

risposta

4

UIViewController carica la sua vista pigramente, solo quando è necessario per la visualizzazione. Ciò vale sia per la creazione della vista a livello di codice utilizzando -loadView o unarchiving da un pennino.

È possibile caricare la vista facendo riferimento alla proprietà della vista di UIViewController.

+0

Grazie per il suggerimento "riferimento alla proprietà vista", era esattamente quello che stavo cercando. – Cyrille

17

Penso che quello che stai cercando è viewDidLoad. awakeFromNib viene richiamato solo sugli oggetti caricati dal pennino. Il controller stesso riceve viewDidLoad:. Dato che chiami initWithNibName:bundle:, in realtà non è stato archiviato dal pennino!

+1

Sono consapevole del fatto che viewDidLoad verrà chiamato, ma non ero sicuro del perché awakeFromNib non lo fosse, perché il controller di visualizzazione è un proprietario di file del NIB, quindi verrà archiviato e IBOutlet e IBAction collegati, oppure così ho pensato. – Boon

+1

Il proprietario del file è un proxy per UIViewController, non un'istanza reale. Presumibilmente il controller di visualizzazione viene istanziato al di fuori dell'ambito del NIB e quindi "cablato" in base alle relazioni specificate sull'oggetto proxy, il proprietario del file. – teabot

2

awakeFromNib non viene chiamato per oggetti segnaposto come Proprietario file e Primo risponditore in iOS. Vedi n. 4 nel Object Loading Process Docs

Problemi correlati