У меня есть ситуация, когда я хочу представить UIAlertController
, чтобы дождаться события (асинхронный запрос данных от третьего лица), чтобы закончить, прежде чем показывать мой основной ViewController
пользователю для взаимодействия с ,iOS отклоняет UIAlertController в ответ на событие
Как только асинхронный код заканчивается, я хочу отклонить UIAlertController
. Я знаю, что обычно UIAlertControllers настраиваются с помощью кнопки, чтобы отклонить ее, которая вводится пользователем. Мне интересно, возможно ли то, что я хочу сделать (увольнение с событием вместо ввода пользователем)?
До сих пор я пытался показать UIAlertController
, а затем ждать в цикле при проверке логическое значение для того, когда происходит событие:
var alert = UIAlertController(title: "Please wait", message: "Retrieving data", preferredStyle: UIAlertControllerStyle.Alert)
self.presentViewController(alert, animated: true, completion: nil)
// dataLoadingDone is the boolean to check
while (!dataLoadingDone) {
}
self.dismissViewControllerAnimated(true, completion: nil)
Это дает предупреждение
Предупреждение: Попытка уволить из контроллера просмотра, пока выполняется презентация или увольнение!
и не отклоняет UIAlertController. Я также пробовал alert.dismissViewControllerAnimated(true, completion: nil)
вместо self.dismissViewControllerAnimated(true, completion: nil)
, но это также не избавляет от UIAlertController
.
Цикл while не нужен и просто растрачивает циклы процессора. Почему бы не сохранить ссылку на UIAlertController и отклонить ее везде, где вы установили self.dataLoadingDone в true? – chedabob
Да, я тоже это осознал. То, что я, по сути, хотел сделать, это дождаться завершения асинхронного запроса и использовать цикл while для ожидания. Тем не менее, это не было необходимо, поскольку его на самом деле просто ждут в любом случае без цикла while =) То, что я закончил (в какой-то момент будет обновлять ответ), зарегистрировало уведомление через NSNotificationCenter для ответа на событие. Таким образом, мне также не нужно логическое. – user3809369