6

Ich habe versucht, das Überschreiben der Standard-Initialisierung eines UIViewController Unterklasse bezeichnet initWithNibName etwa so:UIViewController Unterklasse init nicht aufgerufen, wenn von nib Laden

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     // Custom initialization 
    } 
    return self; 
} 

ich auch seine Definition in der Header-Datei aufgenommen haben. Wenn meine Application Delegate-Nib den Viewcontroller lädt, wird der Initialisierer jedoch nicht nur -viewDidLoad aufgerufen.

Wie instanziiert die Federmagie dann meinen View-Controller? Warum geben alle XCode-Vorlagen den Status

an

// Der angegebene Initialisierer. Überschreiben Sie, wenn Sie den Controller programmgesteuert erstellen und eine Anpassung durchführen möchten, die nicht für viewDidLoad geeignet ist.

Ist es korrekt mein initWithNibName wird nicht aufgerufen, wenn der Viewcontroller von einer anderen Spitze geladen wird?

Antwort

17

Sie müssen Ihren Initialisierungscode in die awakeFromNib-Methode einfügen, damit sie ausgeführt wird, wenn sie von Nib geladen wird. Die Nib-Datei enthält eine archivierte Version der Objekte, die sie enthält, sodass sie im Prinzip nicht erneut initialisiert werden müssen.

+5

Auch "-initWithCoder:" ist die init-Methode, die aufgerufen wird, wenn etwas von einer Nib instanziiert wird. – Wevah

+0

(Lesen Sie die Frage erneut, obwohl "-awakeFromNib" hier erwünscht ist.) – Wevah

+2

Warum -awakeFromNib anstatt -viewDidLoad? – Elliot

Verwandte Themen