Удаление [weak self]
должно решить проблему:
addAction(UIAlertAction(title: "OK", style: .default, handler: { /*[weak self]*/ _ in
Обычно в контроллере представления использовать [weak self]
нормально, поскольку self
относится к V C, но здесь self
относится к UIAlertController
.
Я предполагаю, что вы не сохраняете ссылку на свой настраиваемый контроллер оповещений, когда вы его представляете (т.е. вы просто объявляете его как локальную переменную, представляете его и бросаете это прочь).
Теперь давайте рассмотрим, что происходит при запуске замыкания DispatchQueue
. К этому моменту предупреждение уже было отклонено, поэтому «экран» не сохраняет ссылку на него. Поскольку ничто не сохраняет сильную ссылку на контроллер предупреждений (существует только слабая ссылка из замыкания), экземпляр подкласса UIAlertController
освобожден.
Это всего лишь предположение. Вы можете сделать больше исследований, увидев, какие объекты находятся в памяти, и кто хранит ссылку на кого, используя описанный метод здесь (написанный мной).