这是用户按下“为我的卡充值”按钮时调用的功能。可以为卡充电,但是按按钮时,用户将停留在同一屏幕上。我尝试了推送和演示,但均无济于事。关于为什么/如何解决此问题的任何想法?
@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)
}
答案 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) { }
)时增加延迟。