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 ...
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.
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.
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.
Tags und Links objective-c iphone