672 Stimmen

Versuch, einen UIViewController auf einem UIViewController zu präsentieren, dessen Ansicht sich nicht in der Fensterhierarchie befindet

Ich habe gerade begonnen, Xcode 4.5 zu verwenden, und ich habe diesen Fehler in der Konsole:

Warnung: Versuch, < finishViewController: 0x1e56e0a0 > auf < ViewController: 0x1ec3e000> zu präsentieren, dessen View nicht in der Windowshierarchie ist!

Die Ansicht wird immer noch angezeigt und alles in der App funktioniert einwandfrei. Ist das etwas Neues in iOS 6?

Dies ist der Code, den ich verwende, um zwischen den Ansichten zu wechseln:

UIStoryboard *storyboard = self.storyboard;
finishViewController *finished = 
[storyboard instantiateViewControllerWithIdentifier:@"finishViewController"];

[self presentViewController:finished animated:NO completion:NULL];

0voto

pableiros Punkte 12491

Verwendung von storyboards bemerkte ich, dass ich eine Taste mit zwei Tasten verbunden hatte. @IBActions sind diese beiden @IBActions Funktionen präsentieren eine ViewController jeder. Nachdem ich eine Verbindung entfernt hatte, war das Problem gelöst.

0voto

Stephen J Punkte 2277

Ich hatte dieses Problem auch gerade, aber es hatte nichts mit dem Timing zu tun. Ich habe ein Singleton verwendet, um Szenen zu verwalten, und ich habe es als Präsentator festgelegt. Mit anderen Worten: "Self" war nicht mit irgendetwas verbunden. Ich machte einfach seine innere "Szene" zum neuen Präsentator und voila, es funktionierte. (Voila verliert seinen Reiz, nachdem man seine Bedeutung gelernt hat, heh).

Es geht also nicht darum, "auf magische Weise den richtigen Weg zu finden", sondern darum, zu verstehen, wo der eigene Code steht und was er tut. Ich bin froh, dass Apple eine so eindeutige Warnmeldung gegeben hat, sogar mit Emotionen dazu. Hut ab vor dem Apple-Entwickler, der das getan hat!!

0voto

Mamoon Yameen Punkte 49

Meistens passiert es, wenn man Alert aufruft, nachdem man im Hintergrund an einigen Dingen gearbeitet hat, wie z.B. Api Hit oder speziell Core Data Services. Rufen Sie Alert im Hauptthread Ihrer App auf.

DispatchQueue.main.async {
   // call your alert in this main thread.
   Constants.alert(title: "Network Error!", message: "Please connect to internet and try again.", controller: self)
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X