2016-06-20 4 views
1

J'essaie actuellement d'appeler une méthode prepareForSegue dans un gestionnaire de complétion AlamoFire mais il n'est pas appelé. Voici mon code:Le gestionnaire de complétion Alamofire n'est pas appelé

func loginMember (username: String, password: String, completionHandler: (String?, ErrorType?) ->()) { 

    let headers = [ 
    "Cache-Control": "no-cache", 
    "Content-Type": "application/json" 
    ] 

    let parameters: [String: AnyObject] = [ 

    "grant_type" : "password", 
    "username" : username, 
    "password" : password, 

    ] 

     Alamofire.request(.POST, "\(baseURL)/oauth2/token", parameters: parameters, encoding: .JSON, headers: headers) 
     .validate() 
     .responseJSON { response in 
      switch response.result { 
      case .Success: 

      guard let value = response.result.value else { 
       completionHandler(nil, response.result.error) 
       return 
      } 

      let swiftyJsonVar = JSON(value) 

       accessToken = swiftyJsonVar["access_token"].stringValue 

      print("This is the login response:\(swiftyJsonVar)") 

      case .Failure(let error): 
      print("Sorry there was an error: \(error)") 

      return 
      } 

     } 

    } 

C'est ce que ça ressemble quand appelé:

loginMember(username, password: password, completionHandler: { error in 

    dispatch_async(dispatch_get_main_queue()) { 
    self.performSegueWithIdentifier("loginToHomeSegue", sender: self) 
    } 
    } 
) 

Toutes les idées pour lesquelles l'performSegueWithIdentifier n'est pas appelé?

+0

Vous ne l'appeler dans le cas où la déclaration de garde ne – dan

+0

Je ne savais pas que, comment puis-je changer de sorte qu'il est appelé quand son succède? – SwiftyJD

Répondre

1

Vous n'appelez que votre gestionnaire de complétion dans le cas où vous entrez votre instruction de garde. Vous devez ajouter des appels pour le cas où vous obtenez votre jeton d'accès et votre cas d'erreur.

Alamofire.request(.POST, "\(baseURL)/oauth2/token", parameters: parameters, encoding: .JSON, headers: headers) 
      .validate() 
      .responseJSON { response in 
       switch response.result { 
       case .Success: 

        guard let value = response.result.value else { 
         completionHandler(nil, response.result.error) 
         return 
        } 

        let swiftyJsonVar = JSON(value) 

        accessToken = swiftyJsonVar["access_token"].stringValue 

        print("This is the login response:\(swiftyJsonVar)") 

        // Got the token, call handler 
        completonHandler(accessToken, nil) 

       case .Failure(let error): 
        print("Sorry there was an error: \(error)") 

        // Got an error, call handler 
        completionHandler(nil, error) 

        return 
       } 
     } 
+0

Cela fonctionne, merci! – SwiftyJD