EDIT: Я использую Swift 3.0 и 4.0 AlamofireSwift 3 - обработчик завершения не называется
В моей системе у меня есть список материалов, каждый материал содержит список пучков. Я пытаюсь запросить эти пакеты через webservice, а затем заполнить следующий вид (в этом примере я пытаюсь только распечатать полученные данные), но мой обработчик завершения не вызывается (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)» никогда не вызывается. Я понятия не имею, почему ... :(
Вызывается ли какой-либо код внутри блока, переданный 'responseJSON'? Вы уверены, что конечная точка возвращает ответ JSON? – crizzis
Если вы поставили точку останова перед' if let result = response.result.value' вы можете увидеть, возвращается ли Alamofire. Если да, попробуйте добавить 'print (« response: \ (response.response) »), чтобы увидеть, что он возвращается. Готов поспорить, проблема заключается в 'response.result.value' – Chris