Einleitung: Warum dein UIAlertView nicht funktioniert (und was Stack Overflow damit zu tun hat)
\n\nWenn du jemals gegoogelt hast: „How would I create a UIAlertView in Swift?“ – dann bist du nicht allein. Diese Frage auf Stack Overflow hat Hunderttausende von Aufrufen. Es scheint so einfach: Ein Popup-Fenster mit einem „OK“-Button anzeigen. Doch in der Praxis treten Anfänger (und nicht nur sie) immer wieder in dieselben Fallen.
\n\nIn diesem Artikel analysieren wir die Top-5-Fehler beim Erstellen von UIAlertView in Swift, zeigen dir, wie du sie behebst, und liefern fertigen Code für UIAlertController – den modernen Ersatz für die veraltete API. Wenn du sauberen, funktionierenden Code ohne Abstürze schreiben möchtest, bleib dran.
\n\nFehler Nr. 1: Verwendung von UIAlertView anstelle von UIAlertController
\n\nDer häufigste Fehler ist der Versuch, UIAlertView in modernem Swift aufzurufen. Diese Klasse wurde bereits mit iOS 8 als veraltet (deprecated) markiert. Wenn du schreibst:
let alert = UIAlertView(title: "Fehler", message: "Etwas ist schiefgelaufen", delegate: nil, cancelButtonTitle: "OK")\nalert.show()\n\n… dann wird der Compiler höchstwahrscheinlich eine Warnung oder einen Fehler ausgeben. Und selbst wenn das Projekt kompiliert – im besten Fall funktioniert der Alert auf iOS 13+ nicht korrekt.
\n\nWarum passiert das?
\nApple hat UIAlertView bereits mit iOS 8 durch UIAlertController ersetzt. Die alte Klasse wird nicht mehr unterstützt, und ihre Verwendung kann zu unerwartetem Verhalten führen.
Wie behebt man das?
\nVerwende UIAlertController mit dem bevorzugten Stil .alert oder .actionSheet. Hier ist der korrekte Code:
let alert = UIAlertController(title: "Fehler",\n message: "Etwas ist schiefgelaufen",\n preferredStyle: .alert)\nalert.addAction(UIAlertAction(title: "OK", style: .default))\npresent(alert, animated: true)\n\nMerke dir: In modernem Swift ist UIAlertView ein Legacy-Code. Verwende immer UIAlertController.
Fehler Nr. 2: Vergessen, present() aufzurufen
\n\nSelbst wenn du einen UIAlertController erstellt hast, aber vergisst, ihn anzuzeigen – passiert nichts. Buchstäblich nichts. Der Code wird ausgeführt, der Alert wird im Speicher erstellt, aber der Benutzer sieht ihn nicht.
Typisches Fehlerbeispiel:
\n\nfunc showAlert() {\n let alert = UIAlertController(title: "Hallo", message: "Welt", preferredStyle: .alert)\n alert.addAction(UIAlertAction(title: "OK", style: .default))\n // present() vergessen!\n}\n\nErgebnis: Stille. Kein Fehler, kein Alert. Du rätselst, warum der Code nicht funktioniert.
\n\nWie behebt man das?
\nRufe immer present(_:animated:completion:) auf dem aktuellen View Controller auf:
func showAlert() {\n let alert = UIAlertController(title: "Hallo", message: "Welt", preferredStyle: .alert)\n alert.addAction(UIAlertAction(title: "OK", style: .default))\n present(alert, animated: true, completion: nil)\n}\n\nTipp: Wenn du den Alert aus einem Closure oder asynchronem Code aufrufst, stelle sicher, dass self (der View Controller) noch existiert. Sonst gibt es einen Crash.
Fehler Nr. 3: Falsche Behandlung von Button-Klicks
\n\nBeim alten UIAlertView haben wir den Delegaten alertView(_:clickedButtonAt:) verwendet. Bei UIAlertController ist alles anders – hier kommen Closures zum Einsatz.
Anfänger versuchen oft, die Klasse auf UIAlertViewDelegate zu setzen und die Delegatenmethoden zu implementieren, aber das funktioniert mit UIAlertController nicht.
Falsch:
\n\nclass ViewController: UIViewController, UIAlertViewDelegate {\n func showAlert() {\n let alert = UIAlertController(title: "Frage", message: "Stimmst du zu?", preferredStyle: .alert)\n alert.addAction(UIAlertAction(titl\n\nHinweis: Der Originaltext wurde hier abgeschnitten. Für eine vollständige Übersetzung bitte den vollständigen Text bereitstellen.