-viewDidLoad wird nicht im untergeordneten UIViewController aufgerufen

8

Hab Geduld mit mir, ich lerne immer noch Cocoa Touch. Other -viewDidLoad nicht angerufene Frage hat nichts mit meinem Problem zu tun, ich habe gesucht.

Ich habe FooViewController , eine UIViewController Unterklasse. In FooViewController.xib ist der Besitzer der Datei auf FooViewController eingestellt. Außerdem habe ich Main , dessen App-Delegierter MyApplication ist und dessen Eigentümer der Datei UIApplication ist. Meine primäre Spitze ist auf Main eingestellt.

Ich bin in der Lage, die Ansicht auf dem Bildschirm erscheinen zu lassen, indem ich diesen Fluss verwende (der Code wurde kurz geschnitten):

%Vor%

Diese Nachricht wird jedoch nicht an FooViewController :

gesendet %Vor%

Totale Stille in gdbs Ausgabe.

Ich habe andere Cocoa-Tutorials gesehen, die Instanzen und ähnliches in IBs Dokumentenansicht zeigen, aber ich sehe diese Optionen nicht in meinen. Soll ich fooViewController im Nib instanziieren? Habe ich eine Verbindung verpasst? In FooViewController.xib ist die Eigentümeransicht des Dateiservers mit der Ansicht in der Nib verbunden.

Ich bin sicher, das ist eine einfache Lösung, und ich bin den falschen Weg gegangen. Half!

    
Jed Smith 25.09.2009, 21:04
quelle

3 Antworten

18

Ich habe keine Dokumentation gefunden, um das Folgende zu sichern, aber das habe ich durch experience / experience abgeleitet:

Die viewDidLoad -Methode wird unmittelbar nach dem Aufruf von loadView aufgerufen, und es ist an wen auch immer loadView gerichtet ist, um den zusätzlichen Aufruf an viewDidLoad zu liefern.

In einigen Fällen wird das SDK dieses Verhalten für Sie behandeln. Angenommen, Sie haben eine Unterklasse von UIViewController namens MyViewController ; dann:

  • Wenn Sie auf myViewController.view zugreifen, bevor Sie loadView aufrufen, ist der Superklassen-Accessor intelligent genug, um loadView für Sie und viewDidLoad unmittelbar danach aufzurufen.

Wenn Ihr Code wie folgt aussieht:

%Vor%

Dann werden sowohl loadView als auch viewDidLoad in Ihrem Namen aufgerufen.

Wenn Ihr Code jedoch so aussieht:

%Vor%

Dann kann der% code_de% Getter sehen, dass Sie die Ansicht bereits geladen haben, und Sie gehen davon aus, dass Sie auch view aufgerufen haben - also auch nicht. Ironischerweise verhindert der zusätzliche Funktionsaufruf, dass viewDidLoad aufgerufen wird.

    
Tyler 25.09.2009, 22:24
quelle
4

Ich hatte das gleiche Problem zweimal. Beim ersten Mal habe ich vergessen, die Ansicht von UITableViewController mit dem eigentlichen UITableView im Interface Builder zu verbinden. Beim zweiten Mal habe ich vergessen, awakeFromNib selbst in der Oberklasse aufzurufen.

    
Casebash 15.01.2010 02:15
quelle
3

Und ich habe meine eigene Frage beantwortet, damit dies zukünftigen Leuten helfen kann. Da ich sehe, dass ViewDidLoad, wie seine drei Top-Googles in meinem Vorschlag, "ViewDidLoad nicht aufgerufen", "ViewDidLoad nicht aufgerufen wird" und "ViewDidLoad nicht feuern", stelle ich mir vor, dies ist ein üblicher Fehler ...

Ändern:

%Vor%

An:

%Vor%

Das Problem wurde behoben. Offensichtlich ein Fehler bei der Verwendung von Cocoa.

    
Jed Smith 25.09.2009 21:28
quelle

Tags und Links