2016-12-19 1 views
2

Ainsi je travaille sur une application qui se connecte dans quelque chose j'utilise également alamofire. Maintenant, ce que je veux faire est de le faire aller à une nouvelle vue lorsque le code de réponse pour la connexion est 200 (succès), puis aller à une autre fenêtre lorsque le code de réponse est 204 (échec) J'écris ceci dans swift 3 .Comment est-ce que je devrais changer les vues de seque si la réponse est 200 ou pas d'une demande d'Alamofire

Voici mon IBAction actuel

@IBAction func loginBtn(_ sender: Any) { 

    self.dismiss(animated: true, completion: nil) 
    self.performSegue(withIdentifier: "login", sender: isvalid200()) 

    self.dismiss(animated: true, completion: nil) 
    self.performSegue(withIdentifier: "error", sender: isinvalid()) 

maintenant, je sais que ce pas comment il est censé être fait, mais c'est ce que je pense. Aussi, voici mon code de gestion des erreurs.

func isvalid200() {

Alamofire.request("https://myanimelist.net/api/account/verify_credentials.xml/\(user)/\(pass)") 
     .validate(statusCode: 200..<200) // if error is 200 
     .validate(contentType: ["application/json"]) 


     } 


    func isinvalid() { 


    Alamofire.request("https://myanimelist.net/api/account/verify_credentials.xml/\(user)/\(pass)") 
     .validate(statusCode: 204..<204) // if error is 204 
     .validate(contentType: ["application/json"]) 
    } 

En ce qui concerne l'erreur que je reçois est ce

MyAnime [7446: 265163]> 'fenêtre s ne correspond pas à la' fenêtre de vue!

(sans self.dimiss mais avec elle, il ne fonctionne cependant, il ne reste pas aller à une fenêtre spécifique basé sur le code de réponse IE 200 ou 204.

Toute aide serait super!

Répondre

0

Essayez quelque chose comme ce qui passe sur le statusCode

@IBAction func loginBtn(_ sender: Any) { 
    Alamofire.request("https://myanimelist.net/api/account/verify_credentials.xml/\(user)/\(pass)").responseJSON { [weak self] response in 
     guard let strongSelf = self, let resp = response.response else { return } 
    switch resp.statusCode { 
     case 200: 
      DispatchQueue.main.async { 
      strongSelf.performSegue(withIdentifier: "login", sender: strongSelf) 
      } 
     case 204: 
      DispatchQueue.main.async { 
      strongSelf.performSegue(withIdentifier: "error", sender: strongSelf) 
      } 
     default: 
     //Some other status code 
    } 
    } 
} 

Pour donner une explication sur ce qui se passe laisse décomposer par étape:

  • presses de l'utilisateur se connecter après avoir saisi le nom d'utilisateur/mot de passe
  • Vous faites votre demande de réseau pour vérifier les informations d'identification
  • Une fois que vous recevez une réponse, vous pouvez gérer si cela est un utilisateur valide ou non en fonction du code d'état
  • À ce stade, il suffit d'effectuer la transition nécessaire pour passer au contrôleur de vue suivant. Vous n'appelez appelez rejeter que si vous souhaitez revenir au contrôleur de présentation.
+0

Alors je l'ai fait et ensuite je mets le cas 200: et 204: au milieu. Tout ce qu'il fait est de retourner par défaut. (c'est) ce que je lui ai dit d'imprimer dans la console pour l'état par défaut. Pour le cas 200 et 204 je mets le self.performSegue (withIdentifier: "login", expéditeur: self.isvalid200()) self.dismiss (animé: vrai, achèvement: nul) –

+0

et qui n'a pas fait beaucoup –

+0

Je didn ' Je me rends compte que vous avez eu ces fonctions dans votre section, je vais mettre à jour le code pour la bonne séquence – JustinM