#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