Ich habe eine UIAlertController
, in der die Optionen von einem Array aufgefüllt werden und dem Benutzer präsentiert werden. Der Benutzer wählt dann eine Option aus der Warnung aus. Danach habe ich eine separate Warnung, die dem Benutzer eine Bestätigungsmeldung mit einer OK-Schaltfläche zur Verfügung stellt.Versuch, 2 UIAlertControllers zurück zu präsentieren
Der obige Code sammelt die Daten aus dem Array und verschiebt sie in Aktionen in myAlert. Der obige Code befindet sich innerhalb einer for-Schleife.
Danach benutze ich eine Funktion, um den obersten View-Controller abzurufen, und dann den nächsten Alarm zu drücken.
let top = topMostController()
let alertController = UIAlertController(title: "Location pinned", message: "You've successfully pinned this location, good work!", preferredStyle: UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default) {
(result : UIAlertAction) -> Void in
print("OK")
}
alertController.addAction(okAction)
self.presentViewController(myAlert, animated: true, completion: nil)
top.presentViewController(alertController, animated: true, completion: {
_ in
})
Der Fehler, den ich erhalten ist:
Der Versuch, die Ansicht eines View-Controller zu laden, während es Aufheben der Zuordnung und nicht erlaubt ist und in undefiniertem Verhalten führen kann. UIAlertController: 0x1535b1cd0.
Kann mir jemand dabei helfen?
Warum rufen Sie 'self.presentViewController (myAlert, animiert: true, completion: nil)' im zweiten Codeblock auf? Haben Sie nicht schon im ersten Codeblock die erste Warnung angezeigt? Können Sie auch den Abschlussblock der ersten Warnung verwenden, um die zweite anzuzeigen (bedingt aufgrund einer Benutzeraktion)? – wottle
Sie können die Präsentation Ihrer Bestätigung AlertController im Aktionshandler für den ursprünglichen AlertController aufrufen. Es besteht keine Notwendigkeit, es auf dem obersten Controller auszuführen. Führen Sie es einfach auf sich selbst aus, wie Sie es für das Original getan haben. Darüber hinaus haben Sie einen Retain-Zyklus in Ihrer Aktion Schließung. Sie müssen das Selbst als [unowned self] oder [weak self] erfassen, um das implizite starke Zurückhalten in einer Schließung zu verhindern. – SArnab
Nun, ich habe Self.presentViewController für myAlert bewegt, aber das hat keinen Einfluss darauf. SArnab, könntest du noch ein wenig mehr ausarbeiten? – vkrishnan23