2009-01-29 9 views
20

Mam sterownik paska kart konfiguracji za pomocą konstruktora interfejsu, a każdy element paska karty jest połączony z kontrolerem widoku (karty 4, kontrolery 4 widoku). Chcę wiedzieć, czy Interfejs Builder wykorzystuje metodę -init zainicjować kontroler widoku bo podobno ta metoda nie nazywa się:Czy program Interface Builder używa metody -init do inicjowania kontrolerów widoku?

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

... i chcę zrobić kilka inicjacji. Nie mogę tego dodać do -viewDidLoad, ponieważ jest wywoływana w przypadku ostrzeżenia o pamięci. Dowolny pomysł?

Odpowiedz

47

Przedmioty ładowane z *.(nib|xib) są inited z:

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

Więc można zastąpić to, albo jeśli robi konfigurację po -initWithCoder: nazywa nie jest problemem, można użyć:

- (void)awakeFromNib; 

z protokołu NSNibAwaking.

10

Chciałbym również wspomnieć o initWithCoder vs awakeFromNib.

Ogólnie, podczas przydzielania pamięci dla obiektu lub wartości ustawień zastępuję initWithCoder. Gdy musisz wykonać konfigurację po podłączeniu IBOutletów, należy zastąpić awakeFromNib. Do tego czasu zmienne instancji IBOutlet na inne widoki i kontrolki nie są połączone.