无法推送或显示视图控制器

时间:2019-02-20 01:54:40

标签: swift

这是用户按下“为我的卡充值”按钮时调用的功能。可以为卡充电,但是按按钮时,用户将停留在同一屏幕上。我尝试了推送和演示,但均无济于事。关于为什么/如何解决此问题的任何想法?

@objc private func handleChargeCardButtonPressed() {
    guard let last4 = UserDefaults.standard.object(forKey: "last4") as? String else { return }
    chargeCardOnFile(amount: amountToCharge, last4: last4)
    let scanQRVC: UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "cardRegisteredVC")
    navigationController?.pushViewController(scanQRVC, animated: true)
    //present(scanQRVC, animated: true)
}

1 个答案:

答案 0 :(得分:0)

检查以下代码。

我们将返回fatalError,而不是返回空的userDefaults值,并检查是否存在navigationController。

@objc private func handleChargeCardButtonPressed() {
    guard
        let last4 = UserDefaults.standard.object(forKey: "last4") as? String
    else {
        // check whether the function returns from here or not?
        // use fataError()
        fatalError("last4 is not present in the user defaults")
    }
    chargeCardOnFile(amount: amountToCharge, last4: last4)
    let scanQRVC: UIViewController = UIStoryboard(name: "Main",
                                                  bundle: nil).instantiateViewController(withIdentifier: "cardRegisteredVC")

    // make sure the navigation controller is present.
    guard let navController = navigationController else {
        fatalError("No Navigation Controller present for this view")
    }
    navController.pushViewController(scanQRVC, animated: true)
}

编辑:

从讨论中了解到控制台显示错误:

  

在进行现有转换或演示时;导航堆栈将不会更新。

这意味着在尝试新的推送/呈现时,现有的导航堆栈正在进行中。 (i)尝试将对此当前/推送到下一个视图控制器的调用重构,以使上一个调用完成以单击该按钮,或者(ii)在按下下一个视图控制器(DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { })时增加延迟。