UIAlertView in Swift: 5 fatale Fehler und wie man sie vermeidet

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum dein UIAlertView nicht funktioniert (und was Stack Overflow damit zu tun hat)

\n\n

Wenn 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\n

In 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\n

Fehler Nr. 1: Verwendung von UIAlertView anstelle von UIAlertController

\n\n

Der 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:

\n\n
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\n

Warum passiert das?

\n

Apple 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.

\n\n

Wie behebt man das?

\n

Verwende UIAlertController mit dem bevorzugten Stil .alert oder .actionSheet. Hier ist der korrekte Code:

\n\n
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\n

Merke dir: In modernem Swift ist UIAlertView ein Legacy-Code. Verwende immer UIAlertController.

\n\n

Fehler Nr. 2: Vergessen, present() aufzurufen

\n\n

Selbst 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.

\n\n

Typisches Fehlerbeispiel:

\n\n
func showAlert() {\n    let alert = UIAlertController(title: "Hallo", message: "Welt", preferredStyle: .alert)\n    alert.addAction(UIAlertAction(title: "OK", style: .default))\n    // present() vergessen!\n}
\n\n

Ergebnis: Stille. Kein Fehler, kein Alert. Du rätselst, warum der Code nicht funktioniert.

\n\n

Wie behebt man das?

\n

Rufe immer present(_:animated:completion:) auf dem aktuellen View Controller auf:

\n\n
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\n

Tipp: 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.

\n\n

Fehler Nr. 3: Falsche Behandlung von Button-Klicks

\n\n

Beim alten UIAlertView haben wir den Delegaten alertView(_:clickedButtonAt:) verwendet. Bei UIAlertController ist alles anders – hier kommen Closures zum Einsatz.

\n\n

Anfänger versuchen oft, die Klasse auf UIAlertViewDelegate zu setzen und die Delegatenmethoden zu implementieren, aber das funktioniert mit UIAlertController nicht.

\n\n

Falsch:

\n\n
class ViewController: UIViewController, UIAlertViewDelegate {\n    func showAlert() {\n        let alert = UIAlertController(title: "Frage", message: "Stimmst du zu?", preferredStyle: .alert)\n        alert.addAction(UIAlertAction(titl
\n\n

Hinweis: Der Originaltext wurde hier abgeschnitten. Für eine vollständige Übersetzung bitte den vollständigen Text bereitstellen.

Blogs

Buchempfehlungen