试图弹出一个不存在的视图控制器

时间:2016-03-17 10:56:01

标签: ios swift uinavigationcontroller

我试图回到以前的视图控制器,但我正在努力解决(据我所知)不应该发生的问题。

我正在尝试做的简短说明: 我有4个视图控制器:A,B,C和D. 基本UI流程是A - > B - > C - > D. 在C完成工作后,我想回到B。

我的代码:

let viewControllerArray = self.navigationController?.viewControllers
                for(var i=0;i<viewControllerArray?.count;i++){
                    if(viewControllerArray![i].isKindOfClass(InventoryListViewController)){
                        self.navigationController?.popToViewController(viewControllerArray![i], animated: true)
                    }
                }

如果B仍然存在于导航控制器的堆栈中,则一切正常。如果B已从堆栈中删除(由于内存相关的原因),它会给我一个 尝试弹出一个不存在的视图控制器 错误(明显)。我感到困惑的是,如果B不再存在于堆栈中,那么If语句是否应该阻止popToViewController方法被调用?

2 个答案:

答案 0 :(得分:5)

防止崩溃的最佳方法是通过可选的解包方式。试试这个代码,让我知道它是否解决了这个问题。

let allVC = self.navigationController?.viewControllers

if  let inventoryListVC = allVC![allVC!.count - 2] as? InventoryListViewController {   
self.navigationController!.popToViewController(inventoryListVC, animated: true)
}

答案 1 :(得分:1)

Swift 4

let viewcontrollers = self.navigationController?.viewControllers

viewcontrollers?.forEach({ (vc) in
        if  let inventoryListVC = vc as? InventoryListViewController {
            self.navigationController!.popToViewController(inventoryListVC, animated: true)
        }
    })