2017-09-03 2 views
0

Ich versuche, eine Warnmeldung anzuzeigen, wenn die Kennwörter übereinstimmen. Alles funktioniert sehr gut:Warnung - libC++ abi.dylib: Beenden mit nicht abgefangener Ausnahme vom Typ NSException

1) Web-Service aufgerufen und gibt das Passwort

2) Der Fluss tritt in die, wenn die Bedingung, die im Passwort zu einem Match bezieht

if(userPasswd == sysPasswd) 
    { 
     displayAlert(userMessage: "Welcome! You have been authenticated") 
     return 
    } 

Die displayAlert Funktion aufgerufen wird erfolgreich:

func displayAlert(userMessage: String) 
    { 
    // create the alert 
    let myAlert = UIAlertController(title: "Alert", message: userMessage, preferredStyle: UIAlertControllerStyle.alert) 

    // add an action (button) 
    myAlert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)) 

    // show the alert 
    self.present(myAlert, animated: true, completion: nil) 
    } 

Wenn die letzte Anweisung ausgeführt wird gibt es diesen Fehler

libc++abi.dylib: terminating with uncaught exception of type NSException 

Warum passiert das? Ich bin ein Anfänger in Swift und lerne immer noch die Seile. Es gibt keine gelben Flags usw.

+0

Sind Sie sicher, dass "self" existiert, wenn die Netzwerkmethode zurückkehrt? – the4kman

+0

Richten Sie einen Ausnahmehaltepunkt im Debugger ein, um die genaue Fehlermeldung anzuzeigen. –

+0

sind Sie beim Anzeigen des Alerts im Hauptthread? Ich bezweifle, dass du nicht bist. –

Antwort

0

Benutzerschnittstellenelemente können nur am Hauptthread verwendet werden. Wenn Sie versuchen, die Benutzeroberfläche von einem Hintergrund-Thread zu aktualisieren, müssen Sie Ihre Benutzeroberflächen-Anrufe in einen Anruf mit der Nummer DispatchQueue.main.async umbrechen.

func displayAlert() { 
    DispatchQueue.main.async { 
     let myAlert = UIAlertController(etc...) 
     ... 
    } 
} 
+0

danke. Ich habs. – coderatlarge

Verwandte Themen