ios - 尝试导航到另一个 View Controller 时,快速导航 Controller 返回 nil

标签 ios swift xcode navigation pushviewcontroller

我们有 Router 类将 viewController 导航到另一个 View Controller ,它按预期工作,但随机时 viewControllersStack 为零并发生崩溃。我们尝试使用“if let”来避免崩溃,但这里的问题是当 viewControllersStack 为零时出现黑屏。所以我们已经把它恢复了。你能否建议为什么导航堆栈为零,如果导航为零如何处理?

private func PopOrPushToViewController(_ strControllerClass: String) {

    //get the list of controllers in the stack
    let viewControllersStack: [UIViewController] = self.navigationController!.viewControllers as [UIViewController]
    var boolDidNaviagtion = false
    for viewController in viewControllersStack {
        if boolDidNaviagtion {
            viewController.removeFromParent()
        }
        if String(describing: type(of: viewController)) == strControllerClass {
            boolDidNaviagtion = true
            self.navigationController?.popToViewController(viewController, animated: true)
        }
    }
    if !boolDidNaviagtion {
        let viewController = NavigationController.sharedInstance.storyboardViewControllerFromString(strControllerClass)!
        self.navigationController!.pushViewController(viewController, animated: true)
    }
}



class AddTripViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    @IBAction func navigate(_ sender: Any) {
        popOrPushToViewController( "ListViewController")
    }

}

最佳答案

问题可能是您使用:

viewController.removeFromParent()

如果您弹出堆栈中的某个 VC,其他 VC 将自动删除。

尝试将您的功能更改为:

private func PopOrPushToViewController(_ strControllerClass: String) {

    // get the list of controllers in the stack
    if let vcStack: [UIViewController] = self.navigationController?.viewControllers {

        var didPop = false

        for vc in vcStack {

            // if we find the desired VC already in the navVC's stack of controllers,
            // pop to it, set the didPop flag to true, and quit looking
            if String(describing: type(of: vc)) == strControllerClass {
                self.navigationController?.popToViewController(vc, animated: true)
                didPop = true
                break
            }

        }

        // if we did NOT pop to the desired VC,
        // instantiate it and push it onto the stack
        if !didPop {
            if let vc = NavigationController.sharedInstance.storyboardViewControllerFromString(strControllerClass) {
                navigationController?.pushViewController(vc, animated: true)
            }
        }

    }

}

关于ios - 尝试导航到另一个 View Controller 时,快速导航 Controller 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59611404/

相关文章:

ios - 使用 Swift 的 GET 请求中的额外斜杠

ios - UITableViewCell 中的较大图像?

swift - 在我的 tvOS 应用程序中切换到另一个 View 时如何使项目保持焦点

返回 Controller 时Swift 4保存CBPeripherals数组保存状态

ios - 不确定如何为现有代码正确设置我的变量。 fatal error : Unexpectedly found nil while implicitly unwrapping an Optional value

objective-c - 读取接收和发送的网络流量字节

ios - 如何在动画过程中动态访问半径? (在 CGAffineTransform 期间可能)

ios - 在 Swift 3 词典中对数组值进行排序

swift - 在 Swift/SpriteKit 中生成 Sprite 时出错

ios - 如何编辑当前 View Controller 导航栏上的后退按钮(不是左键)?