2016-06-20 9 views
1

現在、AlamoFire補完ハンドラでprepareForSegueメソッドを呼び出そうとしていますが、呼び出されていません。ここに私のコードは次のとおりです。Alamofire補完ハンドラが呼び出されていない

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 
      } 

     } 

    } 

これは、それが呼び出されたときにどのように見えるかです:

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

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

任意のアイデアはperformSegueWithIdentifierが呼び出されていない理由として?

+0

ガードステートメントが失敗した場合にのみ呼び出します。 – dan

+0

私はそれを認識しませんでした。どのように変更して、成功したら呼び出すことができますか? – SwiftyJD

答えて

1

ガードステートメントを入力した場合にのみ、補完ハンドラを呼び出すことになります。あなたはあなたのアクセストークンとあなたのエラーの場合を取得するための呼び出しを追加する必要があります。

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

それは、ありがとう! – SwiftyJD

関連する問題