我试图回到以前的视图控制器,但我正在努力解决(据我所知)不应该发生的问题。
我正在尝试做的简短说明: 我有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方法被调用?
答案 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)
}
})