Pytanie Czy program Interface Builder używa metody -init do inicjowania kontrolerów widoku?


Mam kontroler paska kart konfiguracji za pomocą konstruktora interfejsów, a każdy element paska karty jest połączony z kontrolerem widoku (karty 4, kontrolery 4 widoków). Chcę wiedzieć, czy program Interface Builder korzysta z -init metoda inicjowania kontrolera widoku, ponieważ podobno ta metoda nie jest wywoływana:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;

... i chcę zrobić kilka inicjalizacji. Nie mogę tego dodać -viewDidLoad ponieważ jest przywoływany w przypadku ostrzeżenia o pamięci. Dowolny pomysł?


20
2018-01-29 15:39


pochodzenie




Odpowiedzi:


Obiekty załadowane z *.(nib|xib) są połączone z:

- (id)initWithCoder:(NSCoder *)inCoder;

Możesz to przesłonić lub wykonać konfigurację po -initWithCoder: nazywa się nie jest problemem, którego możesz użyć:

- (void)awakeFromNib;

z protokołu NSNibAwaking.


47
2018-01-29 16:20





Chciałem także wspomnieć initWithCoder vs awakeFromNib.

Ogólnie, przesłonię initWithCoder przy przydzielaniu pamięci dla obiektu lub wartości ustawień. Gdy musisz wykonać konfigurację po podłączeniu IBOutletów, należy ją przesłonić awakeFromNib. Do tego czasu zmienne instancji IBOutlet do innych widoków i formantów nie są połączone.


10
2018-01-29 16:28





Brzmi, jakbyś chciał to zaimplementować -(void) awakeFromNib.

NSNibAwaking Protocol Reference (wymaga logowania ADC)


6
2018-01-29 16:12