我正在使用 API 获取用户信息,例如地址。在此应用程序中,用户可以输入多个地址,我按下了一个按钮,它将使该地址成为 tableview 单元格中的默认地址。当我按下按钮以将地址设为默认时,它会使地址成为默认地址,但不会在 tableview 单元格中显示地址。即使我已经使用了 dispatch.main.async()。
我的按钮代码作为默认地址。只是表格单元格在默认完成时不显示数据。
func makeAddressDefault(_ sender: UIButton) {
let address = addresses[sender.tag]
let params:Parameters = ["userid": Globals.sharedInstance.user!.id, "addressid": address.id!]
let url = "/makeaddressdefault?userid=" + Globals.sharedInstance.user!.id
RestApiManager.sharedInstance.makePostRequest(vc:self, url: url, post:params, successCompletionHandler:{
(data) in
self.addresses.removeAll() // array of addresses
self.reloadAddresses() // in this reload method in last i have added self.tableview.reload()
}, failureCompletionHandler:{(data) in })
}
//ReloadAddress方法在这里定义。
private func reloadAddresses()
{
Globals.sharedInstance.user!.addresses.removeAll()
Globals.sharedInstance.getUserAddresses(vc: self)
self.addresses = Globals.sharedInstance.user!.addresses
self.tableView.reloadData()
}
//这里写的getUserAddresses()方法。
public func getUserAddresses(vc:BaseViewController) {
if(Globals.sharedInstance.user!.addresses.count == 0)
{
let url = "/useraddresses?userid=" + Globals.sharedInstance.user!.id
RestApiManager.sharedInstance.makeGetRequest(vc:nil, url: url){
(data) in
// parse the result as JSON, since that's what the API provides
do {
guard let jsonResponse = try JSONSerialization.jsonObject(with: data, options: [])
as? [[String: Any?]] else {
print("error trying to convert data to JSON")
return
}
let foodieprofile = jsonResponse[0]
let addresses = foodieprofile["foodieprofile"] as! [String: Any?]
let jsonAddresses = addresses["deliveryaddress"] as! [[String: Any?]]
if(jsonAddresses.count>0 && Globals.sharedInstance.user!.addresses.count==0)
{
for index in 0...jsonAddresses.count-1 {
let this_address = jsonAddresses[index]
var isdeff = false
if let isdef = this_address["isdefault"] as? Bool
{
isdeff = isdef
}
let address = Address(id:this_address["_id"] as! String?, name:this_address["name"] as! String?, address:this_address["address"] as! String?, address2:this_address["address2"] as! String?, zone:this_address["zone"] as! String?, city:this_address["city"] as! String?, landmark:this_address["landmark"] as! String?, phone:this_address["phone"] as! String?, isdefault:isdeff)
Globals.sharedInstance.user!.addresses += [address]
}
}
} catch {
print("error trying to convert data to JSON")
return
}
}
}
}
}
任何帮助将不胜感激。
最佳答案
你需要在 block 内重新加载数据
RestApiManager.sharedInstance.makePostRequest(vc:self, url: url, post:params, successCompletionHandler:{
(data) in
self.addresses.removeAll() // array of addresses
Globals.sharedInstance.user!.addresses.removeAll()
Globals.sharedInstance.getUserAddresses = data // you need to assign your data it is for suggestion only
Globals.sharedInstance.getUserAddresses(vc: self)
self.addresses = Globals.sharedInstance.user!.addresses
self.tableView.reloadData()
}, failureCompletionHandler:{(data) in })
关于ios - TableView 数据未显示在 Alamofire post 请求调用 swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43678631/