представить UIAlertController во время презентации - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь отобразить два разных предупреждения сразу после друг друга. Первый - индикатор загрузки. Второе - это предупреждение, которое сообщает пользователю, что то, что он делал, было успешным или нет после сообщения UDP. Я упростил код для целей презентации.

Моя проблема в том, что, хотя я опускаю loadingAlert, прежде чем вызвать второе предупреждение, я все равно получаю сообщение об ошибке:

Предупреждение. Попытайтесь представить UIAlertController в ViewController во время презентации!

Мое второе предупреждение никогда не отображается.

Вот мой код Swift 4:

func getUpdate()
{    
    let loading = alert(title: "Performing Task...")

    DispatchQueue.global(qos: .userInitiated).async {
        let server:UDPServer=UDPServer(address:"0.0.0.0", port:5006)
        let (data,_,_) = server.recv(1024)

        DispatchQueue.main.async
        {
            loading.dismiss(animated: false, completion: nil)

            OperationQueue.main.addOperation
            {
                alert(title: "How can I show this alert?")
            }
        }
    }
}

func alert(title:String) -> UIAlertController
{
    let alertController = UIAlertController(title: title, message: "", preferredStyle: UIAlertControllerStyle.alert)
    ...
    rootViewController?.present(alertController, animated: true, completion: nil)

    return alertController
}

Каков наилучший способ сделать это?

1 Ответ

0 голосов
/ 14 января 2019

Используйте параметр completion в вызове dismiss:

DispatchQueue.main.async{
    loading.dismiss(animated: false) {
        OperationQueue.main.addOperation {
            alert(title: "How can I show this alert?")
        }
    }
}
...