我有一个在下拉tableview以重新加载时调用的函数。 在函数中,我需要在3个alamofire请求之后重新加载tableview,但它无法正常工作......
self.refreshControl.beginRefreshing()
if let URL = URL(string: "fetch1", relativeTo: Property.baseURL){
fetchGroup.enter()
let headers: HTTPHeaders = [
"Authorization": Property.shared.token,
"content-type": "application/json"
]
Property.alamofireManager.request(URL, headers: headers).responseJSON{ response in
//Manage json
print("LEAVE 1")
self.fetchGroup.leave()
}
}
if let URL = URL(string: "fetch2", relativeTo: Property.baseURL){
fetchGroup.enter()
let headers: HTTPHeaders = [
"Authorization": Property.shared.token,
"content-type": "application/json"
]
Property.alamofireManager.request(URL, headers: headers).responseJSON{ response in
//Manage json
print("LEAVE 2")
self.fetchGroup.leave()
}
}
if let URL = URL(string: "fetch3", relativeTo: Property.baseURL){
fetchGroup.enter()
let headers: HTTPHeaders = [
"Authorization": Property.shared.token,
"content-type": "application/json"
]
Property.alamofireManager.request(URL, headers: headers).responseJSON{ response in
//Manage json
print("LEAVE 3")
self.fetchGroup.leave()
}
}
fetchGroup.notify(queue: .main, execute: {
print("Going to Refresh")
self.refreshControl.endRefreshing()
self.tableView.reloadData()
})
基本上上面代码中发生的事情是某种程度上程序在通知中达到了self.tableview.reloadData()
,并且它也没有打印出“Going to Refresh”。我想知道我是否从不同的功能重新加载tableview所以我试着评论self.tableView.reloadData()
,但它是唯一重新加载tableview的地方。有没有人知道为什么代码没有按预期工作?
现在,它显示 “离开2” “离开3” 但它没有显示“LEAVE 1”。只需直接重新加载而无需等待“LEAVE 1”
答案 0 :(得分:2)
首先,你必须有相同的进入和离开计数,并确保当你进入你离开派遣组。
let dispatchGroup = DispatchGroup()
dispatchGroup.enter()
custom_function_1 { dispatchGroup.leave() }
dispatchGroup.enter()
custom_function_2 { dispatchGroup.leave() }
dispatchGroup.notify(queue: .main) {
print("Completed")
}
答案 1 :(得分:1)
您的代码执行的频率如何?我想像这样的情况:
根据您处理此类案例的方式,用户可能会遇到奇怪的行为。
答案 2 :(得分:0)
对不起伙计们,它没有调用reload tableview。在编辑数据集时,tableview试图重用一个单元格,因为tableview反弹到下一个单元格。