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
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.
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!
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
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
awakeFromNib non viene chiamato per oggetti segnaposto come Proprietario file e Primo risponditore in iOS. Vedi n. 4 nel Object Loading Process Docs
Grazie per il suggerimento "riferimento alla proprietà vista", era esattamente quello che stavo cercando. – Cyrille