与Alamofire一起使用时未调用cellForRowAtIndexPath

时间:2018-08-16 07:39:19

标签: ios swift tableview alamofire

我做了一个调用用户api列表的函数 并将其放在viewDidLoad中,以便在屏幕加载后立即在TableViewCell中获得列表。

但是问题在于调用numberOfRowsInSection之后,Alalmofire.rquest被自动调用,cellForRowAtIndexPath没有被调用,因此TableView为空。

 func userList(){

    let header = [

         "some header":"SomeHeaderValue"
    ]

    var request = BaseUrl + "userList"

    let parameters = ["":""]

    var encodingFormat: ParameterEncoding = URLEncoding()
    if request == "" {
        encodingFormat = JSONEncoding()
    }

    Alamofire.request(request, method: .get, parameters: parameters, encoding: encodingFormat, headers: header).responseJSON { (response:DataResponse<Any>) in

        switch(response.result) {
        case .success(_):
            if let data = response.result.value{
                print(response.result.value)

                self.userArray = data as! [AnyHashable]

            }
            break

        case .failure(_):
            print(response.result.error)
            break
        }
   }
}

2 个答案:

答案 0 :(得分:5)

网络调用是异步的,需要时间。收到数据后,您需要重新加载tableView

 Alamofire.request(request, method: .get, parameters: parameters, encoding: encodingFormat, headers: header).responseJSON { (response:DataResponse<Any>) in

        switch(response.result) {
        case .success(_):
            if let data = response.result.value{
                print(response.result.value)

                self.userArray = data as! [AnyHashable]
                print(self.groupArray)
                print(self.groupArray.count)
                DispatchQueue.main.async {
                    tableView.reloadData()
                }
            }

            break

        case .failure(_):
            print(response.result.error)
            break
        }
   }

答案 1 :(得分:0)

if let data = response.result.value{
                print(response.result.value)

                self.userArray = data as! [AnyHashable]
                print(self.groupArray)
                print(self.groupArray.count)

                self.tableview.reloadData()

 }
 break