如果密码匹配,我试图显示一条警报消息。一切都很好:

1)调用Web服务并返回密码

2)流程进入与密码匹配有关的if条件

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


displayAlert函数被成功调用:

    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)
    }


当执行最后一条语句时,会出现此错误

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


为什么会这样呢?我是Swift的初学者,仍然在学习绳索。没有黄旗等。

最佳答案

用户界面元素只能在主线程上使用。如果尝试从后台线程更新UI,则需要将UI调用包装在对DispatchQueue.main.async的调用中。

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

10-07 19:14