显示警报时出错

时间:2018-08-05 12:16:15

标签: ios swift uialertview uialertcontroller

我正在创建注册屏幕,并在后端使用firebase sdk。我已经在我的注册表单中添加了条件,并且如果在表单中文本字段为空并且按下注册按钮的任何时候,我正在显示带有标题,消息和确定按钮的UIAlertView。但是我在运行应用程序

时看到线程异常
  

应用程序试图在其自身上显示模式视图控制器。呈现控制器为

显示堆栈,并在错误堆栈的末尾显示

  

libc ++ abi.dylib:以类型为NSException的未捕获异常终止

我的警报功能的代码是

func ShowAlert(Title:String,Message:String){

    let alert = UIAlertController(title: Title, message: Message, preferredStyle: UIAlertControllerStyle.alert)
    alert.addAction(UIAlertAction(title:"OK", style: UIAlertActionStyle.default, handler: { (action) in
        alert.dismiss(animated: true)
    }))

    alert.present(alert,animated: true)
}

我感觉是它的一些主线程问题,但我不知道如何解决。

1 个答案:

答案 0 :(得分:2)

当前的视图控制器应该显示警报,因此……

present(alert,animated: true)

而不是

alert.present(alert,animated: true)

更新

从您的评论看来,您好像是想在后台线程上显示警报。 除上述内容之外,您还应始终在主线程上显示警报(或执行任何UI操作)...

DispatchQueue.main.async {
    showAlert(title: "My title", message: "My Message")
}

旁注

Swift中的所有变量,参数和函数名称都应以小写字母开头,例如

func showAlert(title: String, message: String)

代替

func ShowAlert(Title:String,Message:String)