对表格视图的每个单元格的 Alamofire 请求

Posted

技术标签:

【中文标题】对表格视图的每个单元格的 Alamofire 请求【英文标题】:An Alamofire request for each cell of a table view 【发布时间】:2018-01-15 14:54:29 【问题描述】:

我想通过解析由于多个 Alamofire 请求而收到的 JSON 数据来填充表格视图。然而,问题是每个单元都有不同的请求。每个单元格都根据 IndexPath 发出请求。由于调用是异步的,所以并不是所有的请求都能实现……

我的代码:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    var name = ""
    let url = "https://........"+items[indexPath.section][indexPath.row]+"......"

    Alamofire.request(url).responseJSON  (responseData) -> Void in
        if((responseData.result.value) != nil) 
            let swiftyJsonVar = JSON(responseData.result.value!)
            let object = swiftyJsonVar["results"][0]
            print(object)
            name = object["name"].stringValue
            cell.textLabel?.text = name
        
    
    return cell

如何实现每个请求?提前致谢!

【问题讨论】:

问题是 cellForRowAt 没有保留数据,并且当您上下滚动时会一次又一次地发出请求......所以也许您必须考虑缓存数据。 【参考方案1】:

您应该跟踪每个请求的挂钩 indexpath,以便您知道返回的值是什么

 struct Item

    var indexPath:NSIndexPath!

  func getData(index:NSIndexPath)
  

      let url = "https://........"+items[indexPath.section][indexPath.row]+"......"

      Alamofire.request(url).responseJSON  (responseData) -> Void in
    if((responseData.result.value) != nil) 
        let swiftyJsonVar = JSON(responseData.result.value!)
        let object = swiftyJsonVar["results"][0]

         globalArr// store indexpath and value

         /// remove indexoath from allDownloads

         /// send refresh to table

      
     

  


在行的单元格中

     if(indexPath in globalArr)
      
         // show it
      
      else
       

           // check whether it's download is in progress to avoid multiple same requests when scroll because of dequeuing 
         if(allDownloads doesn't contain inexpath)
         

              // create object of item and start download

              // allDownloads.add(object)

          

       

globalArr:跟踪所有下载的对象

allDownloads :跟踪正在进行的下载

【讨论】:

好的,我了解您的解决方案,但它可以让我提出几个 Alamofire 请求吗? 使用,它会为每个请求创建对象 数组allDownloads和globalArr一样吗?? 谢谢!所以在代码的第二部分,你应该写 if(indexPath in globalArr) 对吧?

以上是关于对表格视图的每个单元格的 Alamofire 请求的主要内容,如果未能解决你的问题,请参考以下文章

如何在表格视图中放置每个单元格的图像?

如何更改分组的表格视图单元格的背景?

带有空单元格的表格视图

如何在表格视图中显示表格单元格的详细视图?

表格视图单元格的按钮与其他单元格混淆?

检查每个单元格的条件