Почему предупреждающее отклонение не работает, когда оно срабатывает снова? - PullRequest
1 голос
/ 15 марта 2019

Показываю загрузчик перед отправкой запроса на сервер.После получения ответа - вызывается функция остановки загрузчика.

Первый раз работает нормально.Но при повторном входе на страницу загрузчик не выключается и остается крутиться вечно.(Я полагаю, что это связано с тем, что запрос уже выполняется намного быстрее, и нет существенной задержки).

Для ясности я добавил маркеры в свой код.
Скажите, пожалуйста, чтопроблема и как я могу это исправить?

var alert : UIAlertController?

func showLoader(){
    self.alert = UIAlertController(title: nil, message: NSLocalizedString("pleaseWait", comment: "Текст ожидания загрузки"), preferredStyle: .alert)

    let loadingIndicator = UIActivityIndicatorView(frame: CGRect(x: 10, y: 5, width: 50, height: 50))
    loadingIndicator.hidesWhenStopped = true
    loadingIndicator.style = UIActivityIndicatorView.Style.gray
    loadingIndicator.startAnimating();

    self.alert!.view.addSubview(loadingIndicator)
    present(self.alert!, animated: true, completion: nil)
    Logger.Log("Alert is presented")
}

func stopLoader(){
    if let _ = self.alert {
        Logger.Log("Loader isBeingPresented = \(self.alert!.isBeingPresented)")
        Logger.Log("Loader isBeingDismissed1 = \(self.alert!.isBeingDismissed)")

        self.alert!.dismiss(animated: false, completion: nil)

        Logger.Log("Loader isBeingDismissed2 = \(self.alert!.isBeingDismissed)")

        self.alert = nil

        Logger.Log("Loader dismissed")
    } else {
        Logger.Log("Alert failed")
    }
}

** Выбрано: 2019-03-01 17:00:00 +0000 ** // Первая попытка
** Предупреждениепредставлено **
** Файл существует!**
** requestDone **
** Загрузчик isBeingPresented = false **
** Загрузчик isBeingDismissed1 = false **
** Загрузчик isBeingDismissed2 = true **
** Загрузчик отклонен**
** Выбрано: 2019-03-01 17:00:00 +0000 ** // вторая попытка
** Предупреждение отправлено **
** Файл существует!**
** requestDone **
** Загрузчик isBeingPresented = false **
** Загрузчик isBeingDismissed1 = false **
** Загрузчик isBeingDismissed2 = false **
** Загрузчик отклонен**

1 Ответ

0 голосов
/ 15 марта 2019

Вот как вы должны реализовать блоки завершения:

1) viewDidLoad вызывает controller.start() 2) ведущий звонит view.showLoader() с завершением обратного вызова 3) При обратном вызове вы начинаете NetworkController.getfiles() 4) когда NetworkController.getfiles () завершен, controller.callback вызывает view.stopLoader()

...