【问题标题】:Tried to pop to a view controller that doesn't exist试图弹出一个不存在的视图控制器
【发布时间】:2016-03-17 10:56:00
【问题描述】:

我正在尝试返回到以前的视图控制器,但我遇到了(据我理解)不应该发生的问题。

对我正在尝试做的事情的简短描述: 我有 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 已从堆栈中删除(由于与内存相关的原因),它会给我一个 Tried to pop to a view controller that doesn't exist 错误(显然) .我感到困惑的是,如果 B 不再存在于堆栈中,If 语句不应该阻止调用 popToViewController 方法吗?

【问题讨论】:

  • iskindofclass(InventoryListViewController.class) 我猜缺少类似的东西

标签: ios swift uinavigationcontroller


【解决方案1】:

防止崩溃的最佳方法是可选展开。试试这个代码,让我知道它是否能解决问题。

let allVC = self.navigationController?.viewControllers

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

【讨论】:

    【解决方案2】:

    斯威夫特 4

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

    【讨论】:

      猜你喜欢
      • 2014-02-04
      • 2011-01-11
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 2013-07-25
      • 1970-01-01
      相关资源
      最近更新 更多