Согласно комментариям выше, вы всегда должны запускать работу интерфейса в основном потоке. Вышеописанный обработчик завершения, хотя его создание в главном потоке через asyncAfter
может выполняться в любом потоке, поэтому вам необходимо изменить раздел, открывающий контроллер предупреждений, чтобы он явно находился в основном потоке:
//previous code as above...
DispatchQueue.main.async {
self.present(alertController, animated: true){
// The alert was present
}
}
Вы также можете установить обработчик завершения контроллера оповещений на ноль, если вы не планируете его использовать, вместо того, чтобы иметь пустое замыкание.