Странная задержка с оповещением в UITableView

#ios #swift #uitableview #uialertcontroller

#iOS #swift #uitableview #uialertcontroller

Вопрос:

У меня есть некоторые UITableView данные из internal array . Я хочу показать UIAlertController на кране, но у меня очень странная задержка.

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    print("tapped (dispatcher.conversations[indexPath.row].name)") //this one works fine, no problems here

    let message = dispatcher.conversations[indexPath.row].desc   "nnDo you wanna play this?"
    let alertname = dispatcher.conversations[indexPath.row].name

    let alert = UIAlertController(title: alertname, message: message, preferredStyle: .alert)

    let actionOK = UIAlertAction(title: "Play", style: UIAlertActionStyle.default, handler: { (action) in
        //play the file
    })

    let actionCancel = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel, handler: { (action) in
        //cancel the file
    })

    alert.addAction(actionOK)
    alert.addAction(actionCancel)

    self.present(alert, animated: true, completion: {
        //some code here
    })
 

У моего первого предупреждения есть некоторая задержка, но в основном все в порядке. Но если я пытаюсь нажать на следующую ячейку, мне приходится ждать несколько секунд, пока появится мое оповещение.

Итак, кажется, у меня нет никаких проблем с доступом к моим данным (печать работает просто отлично), но почему-то после этого потребовалось несколько секунд, чтобы показать UIAlertController.

Что я сделал не так?

Комментарии:

1. Вы тестируете его на устройстве или в симуляторе?

2. оба (с одинаковыми результатами).

3. Можете ли вы попробовать это без плагина в устройстве.

4. на самом деле у нас уже есть правильный ответ ниже. я пробовал это, это работает.

Ответ №1:

Вместо этого представьте его в своей основной очереди:

 DispatchQueue.main.async(execute: {
    self.present(alert, animated: true, completion: {
    //some code here
    })
})
 

Комментарии:

1. вау. спасибо! я приму ваш ответ в качестве ответа через 9 минут

2. Отлично, рад помочь @lithium