tableView数据未显示在Alamofire邮政请求请求Call Swift 3



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()
          }
       }

最新更新