2017-10-17 4 views
0

1) J'ai les suivantes:
- un champ de texte pour l'utilisateur d'entrer des données comme le nom d'utilisateur
- Ajout d'une activityIndicator
Comment accéder à d'autres viewController quand dans l'analyse syntaxique JSON URLsession

2) lorsque l'utilisateur appuyez sur la touche "Retour" ou "Aller" ou "Terminé" du clavier, elle appellera la fonction SendPostRequest comme ci-dessous.

Le code n'a pas d'erreur de compilation.

Y a-t-il un problème pour naviguer dans l'URLSession?

problème :

se terminant par exception non capturée de type NSException

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 

ActivityIndicator.startAnimating() 
SendPostRequest() 

} 


unc SendPostRequest(user: String) { 
     let Url = String(format: "your url") 
     guard let serviceUrl = URL(string: Url) else { return } 

     let parameterDictionary = ["username" : "User1"] 
     var request = URLRequest(url: serviceUrl) 
     request.httpMethod = "POST" 
     request.setValue("Application/json", forHTTPHeaderField: "Content-Type") 
     guard let httpBody = try? JSONSerialization.data(withJSONObject: parameterDictionary, options: []) else { 
      return 
     } 
     request.httpBody = httpBody 

     let session = URLSession.shared 
     session.dataTask(with: request) { (data, response, error) in 
      if let response = response { 
       print(response) 
      } 
      if let data = data { 
       do { 
        let json = try JSONSerialization.jsonObject(with: data, options: []) as! NSDictionary 

        //condition met: 
        let jsonStatus: String! = json["Status"] as String 

        if jsonStatus == "Code123" 

        self.myActivityIndicator.stopAnimating() 

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


       }catch { 
        print(error) 
       } 
      } 
      }.resume() 
    } 
+2

Le code ne compile pas. Il y a (au moins) deux problèmes: Swift est sensible à la casse: 'jsonStatus'! =' JsonStatus' et le corps d'une instruction 'if' doit être entre accolades. – vadian

+0

En outre, URLSession s'exécute de manière asynchrone, votre fermeture avec auto-capture forte, peut fuir. –

+0

Désolé, il s'agit d'une faute de frappe. J'ai fait un changement comme ci-dessus. – MilkBottle

Répondre

1

Je pense que le problème est que le code dans le bloc d'achèvement est en cours d'exécution sur le thread d'arrière-plan si juste poster performSegue sur le fil principal comme si

DispatchQueue.main.async { 
    self.myActivityIndicator.stopAnimating() 

    self.performSegue(withIdentifier:"SegueAcct",sender: self) 
} 
+0

Si cela ne fonctionne pas, ajoutez un journal d'impression avant d'effectuer le segue pour vous assurer que vous êtes correctement analysé et que vous arrivez à cette partie du code ... – Ladislav