2016-06-20 15 views
1

Ich versuche gerade, eine prepareForSegue-Methode in einem AlamoFire-Vervollständigungshandler aufzurufen, aber sie wird nicht aufgerufen. Hier ist mein Code:Alamofire-Vervollständigungshandler wird nicht aufgerufen

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 
      } 

     } 

    } 

Dies ist, wie es aussieht, wenn genannt:

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

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

Irgendwelche Ideen, warum die performSegueWithIdentifier nicht genannt wird?

+0

Du nennst es nur in dem Fall, wenn der Schutz Anweisung schlägt fehl – dan

+0

ich nicht, dass ahnte, wie kann ich es ändern, so es heißt, wenn sein Nachfolger? – SwiftyJD

Antwort

1

Sie rufen Ihren Completion-Handler nur dann an, wenn Sie Ihre Guard-Anweisung eingeben. Sie müssen Anrufe für den Fall hinzufügen, in dem Sie Ihr Zugriffstoken und Ihren Fehlerfall erhalten.

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

Das funktioniert, danke! – SwiftyJD