2016-12-28 17 views
1

EDIT呼び出されていない完了ハンドラー:私は私のシステムではスウィフト3.0とAlamofire 4.0スウィフト3 -

を使用していを、私は材料のリストを持って、各材料は、バンドルのリストが含まれています。私はこれらのバンドルをwebservice経由でリクエストして、次のビューを作成しようとしています(この例では、取り込まれたデータのみを印刷しようとしています)が、完了ハンドラは呼び出されていません(ps:私は初心者です。私は非同期progでリードしています)。どんな考え?

WSからデータをフェッチ機能は次のとおりです。

func fetchBundles(materialCode: String, completion: @escaping ([ProductsBundle]?) -> Void) { 
    var bundlesAdded = [ProductsBundle]() 
    let url = baseApiURL + "material-cavaletes/" + materialCode 
    print(url) 

    Alamofire.request(url, headers: headers).responseJSON { 
     response in 
     if let result = response.result.value { 
     var results = JSON(result)["results"] 

     for res in results { 
      bundlesAdded.append(self.getBundleFromJson(json: res)) 
     } 

     completion(bundlesAdded) 
     } 
    } 
    } 

し、データを取得し、ビューを更新する必要があり、関数呼び出し、次のとおりです。

WebApi.sharedInstance.fetchBundles(materialCode: materialBeingListed.id, completion: { 
    (bundlesAdded: [ProductsBundle]?) in 
    guard let myBundles = bundlesAdded else { 
    print("erro") 
    return 
    } 

    print (myBundles) 
}) 

私がいくつかのブレークポイントを置きます"print(myBundles)"という行が決して呼び出されていないことに気づいた。私はあなたが間違ってあなたのAlamofire要求を処理するかもしれないと思う理由は... :(

+0

'responseJSON'に渡されたブロック内のコードが呼び出されますか?エンドポイントがJSON応答を返すのですか? – crizzis

+0

' result = response.result.value' Alamofireが返ってきているかどうかを確認することができます。もし 'print(" response:\(response.response) ")'それは戻っている。私は問題が 'response.result.value'であると確信しています – Chris

答えて

0

見当もつかないこの試してみてください:あなたはJSONデータを使用して、アクセスすることができるはずどのように見えるかを確認したら

Alamofire.request(url, headers: headers).responseJSON { 
    response in 
    switch response.result { 
     case .success(let data): 
     let json = JSON(data) 
     print("JSON: \(json)") 
     break 
     case .failure(let error): 
     print("Fetch failed :(error: \(error.localizedDescription)") 
     switch(error._code) { 
      case NSURLErrorTimedOut: 
      print("Timed Out") 
      default: 
      print(error._code) 
     } 
    } 
} 

をあなたがそれをシリアル化していないときにJSONが辞書になります