2016-12-28 57 views
1

編輯:我使用雨燕3.0和4.0 Alamofire斯威夫特3 - 完成處理不叫

在我的系統我的材料清單,每種材料包含包的列表。我試圖通過web服務請求這些包,然後填充下一個視圖(在這個例子中,我試圖只打印取數據),但我的完成處理程序沒有被調用(PS:我是初學者,這是第一次我領先與異步編)。任何想法爲什麼?

從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)」行永遠不會被調用。我不知道爲什麼... :(

+0

是否傳遞給'responseJSON'的塊內的任何代碼被調用?你確定端點返回一個JSON響應嗎? – crizzis

+0

如果你在'if let result = response.result.value'你可以看到Alamofire是否正在返回,如果是這樣,嘗試添加'print(「response:\(response.response)」)'看看是什麼它正在返回。我敢打賭,問題出在'response.result.value'上 – Chris

回答

0

我想你可能會不正確地處理您的請求Alamofire試試這個:

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數據看起來你應該能夠訪問它正確地。當你反序列化它時,通常JSON變成一個字典