2016-12-29 19 views
0

Пожалуйста, проверьте код ниже:Swift - Передача данных, поступающих из API в другой контроллер представления

@IBAction func sendActivationCode(_ sender: UIButton) { 
    service.Register(phoneNumber: self.mobileNumberTxt.text!, callback: { (response) in 
     self.setCustomerValues(response: response) 
     }) 
} 

func setCustomerValues(response: [String:Any]) { 
     registrationToken = (response["token"]! as! String) 
     code = response["code"] as! Int 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "toStep2" { 
      let vc = segue.destination as! Step2ViewController 
      vc.registrationToken = registrationToken 
     } 
} 

проблема является: подготовка функция выполняется перед setCustomerValues и я не могу использовать registrationToken переменную в Step2ViewController.swift, потому что это ноль.

ответ

0

Вместо того чтобы подключить ваш сегмент от кнопки к Step2ViewController, подключите его к контроллеру. Таким образом, segue не будет автоматически выполняться при нажатии кнопки.

Затем вызовите функцию выполнения из вашего call-запроса setCustomerValues, чтобы выполнить segue явно после получения регистрационного токена. Обратите внимание, что если обратный вызов не находится в основном потоке, перед вызовом функции performSegue вам нужно будет отправить_async в основной поток.

+0

Спасибо Майк Таверна – nouf

0

Вы должны нажать viewcontroller после self.setCustomerValues(response: response). Не нажимайте viewcontroller, когда sendActivationCode

+0

Спасибо PhuocLuong – nouf

0

Лучший способ выйти из этой проблемы - создать метод IBAction с вашей кнопки на сенсорном экране внутри события, а не создавать какие-либо Segues на «action» вашей кнопки.

Используйте следующий код:

@IBAction func sendActivationCode(_ sender: UIButton) { 

     service.Register(phoneNumber: self.mobileNumberTxt.text!, callback: { 
     (response) in 

      let vc = self.storyboard?.instantiateViewControllerWithIdentifier("Step2ViewController") as! Step2ViewController 
      vc.registrationToken = (response["token"]! as! String) 
      vc.code = response["code"] as! Int 
      self.navigationController?.pushViewController(vc!, animated: true) 
     }) 
}