Проверьте этот код ниже.
Вместо того, чтобы возвращать пустое значение userDefaults, мы делаем fatalError. Также проверяет, присутствует или нет навигационный контроллер.
@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)
}
Редактировать:
Из обсуждения понятно, что консоль показывает ошибку:
во время существующего перехода или презентации;стек навигации не будет обновлен.
Это означает, что существующий стек навигации находится в процессе, пока пробуется новый push / present.(i) Попробуйте изменить рефакторинг вызова на этот контроллер текущего / push-перехода к следующему представлению, чтобы предыдущий вызов завершил нажатие кнопки или (ii) добавили задержку при нажатии на контроллер следующего просмотра (DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { }
).