Warum wird nicht mein awakeFromNib Feuer?
Bin ich angefangen mehr zu bewegen, von meiner Sicht Hierarchie Bau IB.
Habe ich eine nib-Datei namens "AlignmentViewController.xib", in dem ich meine Sicht Hierarchie mit AlignmentViewController die Dateien, die Besitzer. Dies funktioniert sehr gut.
Einer der Methoden, die ich bleiben unscharf ist awakeFromNib. In der folgende code-snippet AlignmentViewController ich hinzufügen, die einzige zusätzliche Methode awakeFromNib. Allerdings wird es NICHT aufgerufen:
- (void)awakeFromNib {
NSLog(@"AlignmentViewController - awakeFromNib");
[super awakeFromNib];
}
- (id)initWithChromosomeName:(NSString *)chromosomeName
basepairStart:(NSUInteger)basepairStart
basepairEnd:(NSUInteger)basepairEnd {
self = [self initWithNibName:@"AlignmentViewController" bundle:nil];
if (nil != self) {
self.title = @"Alignment";
self.chromosomeName = chromosomeName;
self.basepairStart = basepairStart;
self.basepairEnd = basepairEnd;
self.wantsFullScreenLayout = YES;
}
return self;
}
Kann jemand klären für mich, was ich hier verpasst?
Cheers,
Doug
UPDATE:
Nach der Lektüre einige der Antworten erkenne ich, dass ich brauchen, um an die Unterseite von etwas, das ist ziemlich fundamental.
Suchen bei der Initialisierung:
- (id)initWithChromosomeName:(NSString *)chromosomeName
basepairStart:(NSUInteger)basepairStart
basepairEnd:(NSUInteger)basepairEnd {
self = [self initWithNibName:@"AlignmentViewController" bundle:nil];
Ich merke, ich rufe initWithNibName:bundle: indirekt. Ist diese schlechte Praxis? Die AlignmentViewController.xib-Datei definiert meine Ansicht-Hierarchie. Aber ich bin nicht wirklich mit initWithNibName:bundle: in der typischen Art? Gibt es einen besseren Weg, dies zu tun?
viewDidLoad
speziell für die Verarbeitung, die Sie tun müssen, um in Ihrem controller, nachdem der view geladen wurde (ob manuell oder durch eine Feder).Ja. Ich umfangreichen Gebrauch von viewDidLoad. Ich bin nur versuchen, sich mehr zu bewegen UI-Bau-IB, und ich benötigen, um mit awakeFromNib irgendwann.
Verwendung von IB nicht Mandat, Einsatz von
awakeFromNib
noch es widerspricht Einsatz von viewDidLoad
.InformationsquelleAutor dugla | 2009-10-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
-awakeFromNib
wird gesendet, um alle Objekt instanziiert werden von der Spitze nach alle nib-Objekte instanziiert. Der Eigentümer ist nicht eines dieser Objekte. Es besteht vor Deserialisieren der Feder und verdrahtet ist, um die Feder nach dem laden, es ist also nicht geschickt-awakeFromNib
(es sei denn natürlich wird er instanziiert, einige andere Feder selbst).Ein Anhaltspunkt ist hier, dass es keine Möglichkeit beide
-initFromChromosomePair:basepairStart:basepairEnd:
und-awakeFromNib
konnte beide genannt werden. Der nib-loader ruft immer-initWithCoder:
,-initWithFrame:
oder-init
(die Regeln für die gesendet wird, sind in Der Nib-Objekt-Lebenszyklus). Die Tatsache, dass Sie einige andere designierte Initialisierer stark darauf hin, dass Sie manuell erstellen, dieses Objekt irgendwo im code, was bedeutet, dass dieses Objekt nicht "Erwachen aus der Feder."Viele Feuer; nur Ziel-die Objekte instanziiert, die von der nib-loader. Der Besitzer der Feder ist nicht im die Feder, und so nicht -awakeFromNib. -viewDidLoad versandt wird, um den view-controller, das ist, wo würden Sie Dinge tun, die getan werden müssen, nachdem sich die Feder vollständig geladen ist. Beachten Sie, dass ein view-controller kann in einer Feder, so empfangen können -awakeFromNib (wenn es geladen wird, aus der übergeordneten nib) und dann später -viewDidLoad (wenn eigener Feder fertig geladen ist). -awakeFromNib wird gesendet, um alle Objekte in einer nib nachdem alle Objekte in der Spitze wurden instanziiert und IBOutlet WLAN.
Jetzt verstehe ich es. Danke Rob, das ist wirklich klärt die Sache auf. Ich war mit Blick auf die Tatsache, dass filesOwner ist nur ein proxy, der nicht Mitglied des nib. Coolness. Tausend Dank Rob.
Schön, ich wusste gar nicht, dass FileOwner nicht, wird dieser Anruf als wenn die Feder die Ansichten einer benutzerdefinierten Klasse.
InformationsquelleAutor Rob Napier
Nur das hinzufügen einer Klärung: -awakeFromNib gesendet wird File ' s Owner im Kakao, aber nicht Cocoa Touch.
Von den Apple-Docs:
...
InformationsquelleAutor dodgio
Basierend auf dem, was Sie haben uns gesagt, ich glaube, ich weiß was dein problem ist.
awakeFromNib
wird aufgerufen, wenn ein Objekt deserialisiert wird aus einer nib-Datei. Hier haben Sie ein Objekt, das der Eigentümer, das gibt es vor die Feder geladen wird. SoawakeFromNib
würde nie an IhreAlignmentViewController.h
.Wenn Sie müssen etwas tun, hier, versuchen Sie es mit
loadView
statt. Oder tun Sie es einfach nach dem laden der nib. Was ist es, dass Sie anknüpfend zu tun, dass Sie wollte, es zu tun inawakeFromNib
?Nein, es ist, dass
awakeFromNib
aufgerufen ist nicht auf dem controller, weil dein controller nicht in der Spitze. Es wird genannt werden auf allen Ansichten und so, dass sind in der Spitze.Beachten Sie, dass oben, wo Gordon sagt "loadView," ich glaube, er heißt "viewDidLoad." Sie sollten in der Regel nicht mit Chaos -loadView beim Umgang mit Feder-based view-Controller.
Sixten und Rob, sehr hilfreich. Der Nebel hebt sich. Erleuchtung unmittelbar bevorsteht. Cheers.
InformationsquelleAutor G Gordon Worley III