im使用API获取诸如地址之类的用户信息。在此应用程序中,用户可以输入多个地址,我已经在按下了一个按钮,它将将该地址作为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 })
}
//在此处定义了ReloAaddress mehtod。
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
}
}
}
}
}
任何帮助将不胜感激。
您需要在块中重新加载数据
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 })
您需要在getUserAddresses
方法中添加
public func getUserAddresses(vc:BaseViewController, callback: (_ issuccess: Bool) -> Void) {
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]
callback(true) // return true.....add this line
}
}
} catch {
print("error trying to convert data to JSON")
callback(false) // return false.....add this line
return
}
}
}
}
}
调用方法
Globals.sharedInstance.getUserAddresses{ (issuccess) in
// check if success then reload table
if issuccess{
Globals.sharedInstance.user!.addresses.removeAll()
self.addresses = Globals.sharedInstance.user!.addresses
self.tableView.reloadData()
}
}