2017-04-19 2 views
0

Ich habe einen Endpunkt, der eine Telefonnummer einnimmt und einen Code an die Nummer sendet, aber diese Nachricht auch an den Datenabschnitt der Sitzung zurückgibt, die sie aufgerufen hat. All dies funktioniert, aber das Problem, das ich habe, ist, dass, nachdem die Sitzung den Anruf macht, bin ich zum nächsten Bildschirm segue und ich gebe diesen Code in den nächsten Controller. Aber ich denke, dass die API zu langsam reagiert, so dass der Code nach Ablauf der Zeit (und Vorbereitung für den Übergang) noch nicht zurückgegeben wurde. Wie kann ich das beheben?Anzeige Antwort von URLSession

+0

Setzen Sie die 'performSegue (withIdentifier' Zeile ** in ** den Completion Block. – vadian

+0

Also habe ich das versucht und das gleiche scheint immer noch zu passieren? –

+0

Der Code soll funktionieren Wenn die Zeile rechts nach der 'self.currentCode = json [...' Zeile und natürlich entfernt werden nach 'resume()'. Btw: übergeben Sie einfach 'nil' als Absender und Sie brauchen keine' URLRequest' bei der Verwendung von 'GET'. – vadian

Antwort

0

Das Problem ist, dass Sie self.performSegue(withIdentifier: "toVerifyCode", sender: (Any?).self) nicht im Verschluss platziert haben.

Also, Sie haben es so zu platzieren:

let task = URLSession.shared.dataTask(with: request as URLRequest) { 
     data, response, error in 
     //print(error?.localizedDescription) 

     do { 
      let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as AnyObject 

      //on main thread 
      DispatchQueue.main.async { 
       self.currentCode = json["code"]!! as! String //-> This is the code the is returned from the api call 
       self.performSegue(withIdentifier: "toVerifyCode", sender: (Any?).self) 
      } 

     }catch{ 
      print("error with serializing JSON: \(error)") 
     } 
    } 
    task.resume() 

Beachten Sie auch, dass Ihre Schließung asynchron ausgeführt wird, so wickelte ich den Anruf auf Haupt-Thread ausgeführt werden durch GCD verwendet wird.

+0

Vielen Dank! Das hat funktioniert –

+0

@CesaSalaam Sie sind herzlich willkommen. – Shmidt

Verwandte Themen