【问题标题】:calling popToRootViewController on the main thread after network callback is not working网络回调不起作用后在主线程上调用 popToRootViewController
【发布时间】:2020-11-04 17:44:45
【问题描述】:

当用户发送其注册表单时,我试图弹出登录屏幕的 popToRootViewController。为此,当服务器端响应成功时,我有一个委托回调。问题是,如果我在委托回调期间调用 popToRoot... 方法,当前的 viewController 不会弹出。

RegisterView->RegisterPresenter->NetworkManager NetworkManager->PresenterInput->RegisterView->RegisterPresenter->RegisterWireframe(调用popToRootViewController over RegisterView)

在我的线框上:

    extension RegisterRouter: RegisterRouterProtocol {
    func presentLoginBack(from: RegisterViewProtocol) {
        if let vc = from as? UIViewController {
            DispatchQueue.main.async() {
                vc.navigationController?.popToRootViewController(animated: true)
            }
        }
    }
}

在networkLayer上:

guard (200...207) ~= status else {
                    if status == 210 {
                        self.presenterInputDelegate?.notifyEndRegisterSuccess()
                    }

【问题讨论】:

  • 您能否检查其中任何一个都不为零vc, presenterInputDelegate, navigationController。您的代码是否也进入此流程:if status == 210 {?任何控制台警告?
  • 您好 vpoltave,我有这个警告:popToViewController:transition: 调用 而现有的过渡或演示正在发生;导航堆栈不会更新。
  • 可能 UIActivityIndi​​catorView 有干扰。所有组件也不为空
  • 可以。尝试先关闭呈现的viewController,然后再弹出
  • vpoltave,问题是我在网络回调正常时显示的成功警报。所以我设置了一个警报动作来调用“RegisterPresenter.presentLoginView()”。现在正在工作

标签: ios swift mvp


【解决方案1】:

正如 vpoltave 提到的,有一个警告:

popToViewController:transition: called on <UINavigationController 0x126844c00> while an existing transition or presentation is occurring; the navigation stack will not be updated.

这让我意识到我在执行 popToViewController 转换的同时在主线程中显示了一个警报。

因此,解决方案是在用户关闭警报时执行 popToViewController。

【讨论】:

    猜你喜欢
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2021-08-27
    相关资源
    最近更新 更多