Как дождаться закрытия, прежде чем представить viewController - PullRequest
0 голосов
/ 16 сентября 2018

Когда я нажимаю secondButton до того, как статья не будет загружена, ArticleViewController пуст, потому что showArticleView (section) выполняется до завершения закрытия.

Как мне ожидать, что завершение завершится, чтобы выполнить showArticleView (section) метод.

Контроллер не должен быть представлен без данных.

 @IBAction func secondButtonPressed() {
        if let data = issue.data, let article = data.getTableOfContents.first {
            downloadArticles(for: article)
        }
    }

private func downloadArticles(for section: IssueDataSection) {
    if let mainPage = section.pages.first {
        currentArticleDownload = issue.mediaManager.download(page: mainPage.intValue, loadingDelegate: self, completion: { medias in
            if let medias = medias {
                medias.articles(for: section) { _ in
                    self.showArticleView(section)
                }
            }
        })
    }
}

private func showArticleView(_ section: IssueDataSection?) {
    if let controller = UIStoryboard(name: "IssueViewer", bundle: nil).instantiateViewController(withIdentifier: "ArticleViewController") as? ArticleViewController {
        controller.issue = issue
        if let section = section {
            controller.section = section
        }
        controller.showMagHandler = {
            self.firstButtonPressed()
        }
        controller.modalPresentationCapturesStatusBarAppearance = true
        present(controller, animated: true, completion: nil)
    }
}

1 Ответ

0 голосов
/ 17 сентября 2018

Возможно, контроллер не представлен из основного потока.

Вместо self.showArticleView(section) попробуйте это

   DispatchQueue.main.async(execute: {
       self.showArticleView(section)
   })

Вместо async вы можете попробовать asyncAfter(.now()+0.5,..., чтобы выделить больше времени длястраница для скачивания.

...