ViewDidLoad wird vor initWithNibName aufgerufen?

7

Ich habe den merkwürdigsten Fehler, und ich hoffe, jemand könnte mir helfen. Hier ist der Code, wenn ich einen View-Controller erstelle und ihn an navigationController schiebe. Das Problem besteht darin, die Zufallsvariable an den neuen Ansichtscontroller zu übergeben. Ich habe versucht, es in der init-Methode zu übergeben und es auch mit der unten angegebenen Zeile übergeben.

%Vor%

Wenn ich jedoch auf die Zufallsvariable in der viewDidLoad von MultipleBet zugreife, ist sie immer FALSE.

Hier ist der Code des MultipleBet:

%Vor%

und hier ist der Code der viewDidLoad:

%Vor%

Ich deklariere die Variable und die Eigenschaft wie folgt:

%Vor%

und die Ausgabe ist immer:
RANDOM2.2: 0
RANDOM2: 1
RANDOM2.1: 1
RANDOM1: 1

Warum wird der NSLog von der viewDidLoad vor allen anderen ausgegeben? Es sollte der letzte sein ... Könnte es wegen meiner benutzerdefinierten Init-Methode sein? Ich nenne das [Super-Init], also sollte es kein Problem sein ...

    
ffleandro 01.02.2011, 11:17
quelle

3 Antworten

20
Die Methoden

viewDidLoad und init* können nicht nacheinander ausgeführt werden. Code in Ihren init* -Methoden kann dazu führen, dass die Ansicht geladen wird, daher wird viewDidLoad aufgerufen, auch wenn die init* -Methode nicht beendet wurde.

Wahrscheinlich führt ein Code in dem Teil, den Sie weggelassen haben, dazu, dass die Ansicht geladen wird. Wenn Sie uns diesen Teil zeigen, können wir vielleicht darauf hinweisen. Oder Sie können auch die self.random = isRandom; -Zeile als erste Zeile in Ihrem if (self) -Block verschieben und sehen, ob das funktioniert. Auf diese Weise wird das Laden der Ansicht ausgeführt, nachdem Sie self.random zugewiesen haben.

%Vor%     
Altealice 01.02.2011, 12:49
quelle
1

Ich stieß auf dieses Problem. Ich habe eine Methode oder Eigenschaft mit self im Selektor aufgerufen, z. self.bannerView.frame oder [self createBannerView] aus der init * -Methode. Offensichtlich ist self zu diesem Zeitpunkt noch nicht vollständig initialisiert, also hat Apple offensichtlich einen Code, der viewDidLoad aufruft, bevor er auf Eigenschaften oder Methoden zugreift. Meine Lösung war, die Aufrufe von init zu verschieben und sie in viewDidLoad zu platzieren.

    
cramhead 27.07.2011 03:08
quelle
0

Wahrscheinlich verursachen Sie in dem Teil, den Sie weggelassen haben (...), dass die Ansicht irgendwie geladen wird. Das heißt, wenn Sie einen Initiator im Initialisierer aufrufen, können Sie eine [self.tableView reloadData] oder so etwas machen.

    
Steven Kramer 01.02.2011 11:45
quelle

Tags und Links