iOS. Versuch UIAlertController auf UIViewController dessen Blick ist nicht in die Fenster-Hierarchie
Swift 3, Xcode 8.1. Ich möchte die Anzeige UIAlertController
im UIViewController
.
Habe ich Methoden:
private static func rootViewController() -> UIViewController {
//cheating, I know
return UIApplication.shared.keyWindow!.rootViewController!
}
static func presentAlert(_ message: String) {
let alertView = UIAlertController(title: "RxExample", message: message, preferredStyle: .alert)
alertView.addAction(UIAlertAction(title: "OK", style: .cancel) { _ in })
rootViewController().present(alertView, animated: true, completion: nil)
}
Vollständigen code dieser Klasse finden Sie hier
Rufe ich die Methode presentAlert in viewDidLoad
:
override func viewDidLoad() {
super.viewDidLoad()
DefaultWireframe.presentAlert("test")
...
}
und bekam die Warnung:
Warnung: Versuch UIAlertController: 0x7f904ac0d930 auf UIViewController: 0x7f904ad08040 dessen Blick ist nicht in die Fenster-Hierarchie!
So vermeiden Sie die Warnung, und die Warnung angezeigt?
Es funktioniert, wenn ich zu zeigen versuche-Alarm in der Initiale ViewController, aber es funktioniert nicht in einem anderen ViewController verbunden mit push-segue mit Erster VC.
Sind Sie sicher, dass die
Drücken Sie die debug-Schaltfläche "Ansichten" (die in der bar über die debug-Konsole) auf dieser viewController. Auf der linken Seite sehen Sie Ihre gesamte Sicht-stack, mit dem Fenster an der Spitze. Sie können der rechten Maustaste auf eine beliebige Ansicht zu drucken, eine Beschreibung. Vergleichen Sie dies zu der Ansicht, rootViewController(); es muß der Fall sein, die zeigen, wie Ihre rootViewController Ansicht nicht mehr in der Hierarchie. Wählen Sie eine Ansicht, und verwenden, statt.
Irgendeine Lösung gefunden? Die Begegnung mit demselben problem.
rootViewController
auf, die Sie versuchen zu präsentieren UIAlertController
sichtbar ist und nicht gedeckt durch einen anderen modal-view-controller zum Beispiel?Drücken Sie die debug-Schaltfläche "Ansichten" (die in der bar über die debug-Konsole) auf dieser viewController. Auf der linken Seite sehen Sie Ihre gesamte Sicht-stack, mit dem Fenster an der Spitze. Sie können der rechten Maustaste auf eine beliebige Ansicht zu drucken, eine Beschreibung. Vergleichen Sie dies zu der Ansicht, rootViewController(); es muß der Fall sein, die zeigen, wie Ihre rootViewController Ansicht nicht mehr in der Hierarchie. Wählen Sie eine Ansicht, und verwenden, statt.
Irgendeine Lösung gefunden? Die Begegnung mit demselben problem.
InformationsquelleAutor Igor Kasuan | 2016-11-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
In viewDidLoad, die Ihre app noch nicht vorgestellt der view-controller, um die user noch, so eine Warnung kann nicht angezeigt werden. Versuchen Sie es ausführen, die code in viewDidAppear
Tolle Antwort. Dank
InformationsquelleAutor karnett
Ich hatte ähnliches problem/Fall, wo die Handlung Blatt war nicht die Wiedergabe auf einem ViewController, die geschoben wurde, auf einem anderen ViewController. Die Fehler die es gab war auch ähnlich wie Ihr. Was Sie getan haben, die perfekt funktioniert auf normalen ViewControllers aber funktioniert einfach nicht auf der ViewControllers, die geschoben werden, über andere ViewController.
Habe ich das problem gelöst, indem das Objekt der Klasse
UIAlertController
wie eine Instanz-variable von meiner Klasse, statt es lokal innerhalb der Funktion zum auslösen.Also in deinem Fall, versuchen Sie deklarieren
var alertView: UIAlertController?
an der Spitze der Klasse, wo die Instanz-Variablen deklariert werden und dann nur initialisieren Sie Sie in Ihre gewünschte auslösende Funktion zu verwenden wie folgt:Könnte einige Fehler von der Apple-Seite bei der Aufrechterhaltung der Verweis war dieses problem verursacht. Aber umgehen ich oben schrieb, funktioniert perfekt.
InformationsquelleAutor Rohan Sanap