TL; DR Sie können nur 1 rootViewController und den zuletzt vorgestellten haben. Versuchen Sie also nicht, dass ein Viewcontroller einen anderen Viewcontroller präsentiert, wenn dieser bereits einen nicht entlassenen präsentiert.
Nachdem ich einige meiner eigenen Tests durchgeführt habe, bin ich zu einem Schluss gekommen.
Wenn Sie einen rootViewController haben, auf dem Sie alles präsentieren möchten, kann dieses Problem auftreten.
Hier ist mein rootController-Code (offen ist meine Verknüpfung zum Präsentieren eines Viewcontrollers aus dem Stammverzeichnis).
func open(controller:UIViewController)
{
if (Context.ROOTWINDOW.rootViewController == nil)
{
Context.ROOTWINDOW.rootViewController = ROOT_VIEW_CONTROLLER
Context.ROOTWINDOW.makeKeyAndVisible()
}
ROOT_VIEW_CONTROLLER.presentViewController(controller, animated: true, completion: {})
}
Wenn ich zweimal hintereinander aufrufe (unabhängig von der verstrichenen Zeit), funktioniert dies beim ersten Öffnen einwandfrei, beim zweiten Öffnen jedoch NICHT. Der zweite offene Versuch führt zu dem obigen Fehler.
Wenn ich jedoch die zuletzt präsentierte Ansicht schließe und dann open aufrufe, funktioniert dies einwandfrei, wenn ich open erneut aufrufe (auf einem anderen Viewcontroller).
func close(controller:UIViewController)
{
ROOT_VIEW_CONTROLLER.dismissViewControllerAnimated(true, completion: nil)
}
Ich bin zu dem Schluss gekommen, dass sich der rootViewController nur des MOST-RECENT-CALL in der Ansichtshierarchie befindet (auch wenn Sie ihn nicht geschlossen oder eine Ansicht entfernt haben). Ich habe versucht, mit allen Loader-Aufrufen zu spielen (viewDidLoad, viewDidAppear und verzögerte Versandanrufe), und ich habe festgestellt, dass ich es nur zum Laufen bringen kann, wenn ich NUR vom obersten View-Controller anwesend bin.
presentViewController:animated:completion
einen Navigationscontroller aufzurufen . Tun Sie dies im App-Delegaten?