Не могу нажать или представить контроллер представления - PullRequest
0 голосов
/ 20 февраля 2019

Эта функция вызывается, когда пользователь нажимает кнопку «зарядить мою карту».Зарядка карты работает, но после нажатия кнопки пользователь остается на том же экране.Я попробовал и толкать и представлять, но ни один не работал.Любые идеи относительно того, почему / как это исправить?

@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 голосов
/ 20 февраля 2019

Проверьте этот код ниже.

Вместо того, чтобы возвращать пустое значение 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) { }).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...