【发布时间】: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: 调用
而现有的过渡或演示正在发生;导航堆栈不会更新。 -
可能 UIActivityIndicatorView 有干扰。所有组件也不为空
-
可以。尝试先关闭呈现的
viewController,然后再弹出 -
vpoltave,问题是我在网络回调正常时显示的成功警报。所以我设置了一个警报动作来调用“RegisterPresenter.presentLoginView()”。现在正在工作