Попытка представить ... на ... чье представление не находится в иерархии окон - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь перейти к «окну успеха», когда платеж был правильно обработан. Я пытаюсь сделать это с помощью:

self.performSegue(withIdentifier: "successView", sender: self)

внутри моей функции addCardViewController. (показано здесь:)

    func addCardViewController(_ addCardViewController: STPAddCardViewController, didCreateToken token: STPToken, completion: @escaping STPErrorBlock) {

    // Monetary amounts on stripe are based on the lowest monetary unit (i.e. cents),
    // therefore, we need to multiply the dollar amount by 100 to get the correct amount.
    let stripeAmount = toPay * 100

    // Call the 'stripeCharge' Firebase cloud function, with user's card token and amount
    functions.httpsCallable("stripeCharge").call(["token": token.tokenId, "amount": String(stripeAmount)]) { (result, error) in
        if let error = error {
            print("Error: \(error)")
        }

        // Get the charge id after successful payment
        var chargeId: String
        if let data = result?.data as? [String: Any] {
            chargeId = data["chargeId"] as? String ?? "no id"
            print("Charge id: \(chargeId)")

            //send new info

            //show successfull payment view with charge

            //self.present(self.successViewController, animated: true, completion: nil)
            self.performSegue(withIdentifier: "successView", sender: self)
        }

        completion(nil)
        //self.performSegue(withIdentifier: "successView", sender: self)
    }

}

но я получаю сообщение об ошибке "Попытка представить ... на ..., чье представление не находится в иерархии окон"

Кто-нибудь знает, почему это? вот изображение main.storyboard вот изображение main.storyboard

1 Ответ

0 голосов
/ 23 января 2019

Может быть, вы не в основной теме? Обычно функции обратного вызова сетевых вызовов отключены от основного потока. Если вы не уверены, что это не проблема, попробуйте добавить его:

DispatchQueue.main.async {
  self.performSegue(withIdentifier: "successView", sender: self)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...