2017-09-14 26 views
0

我试过的第一种方法导致了错误,由于中断布局,但基本上在这里我的问题:有一个tableview的单元格都有滑块/进度视图。如果用户点击下载,则这些滑块上的值需要等于附加项目(我将RSS项目分配给每个单元格,其音乐)的下载百分比。如何连续更新一堆表格单元格上的滑块?

我打电话本功能的观察员下载进度这里:

//DOWNLOAD PROGRESS 
    func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) { 
     let progress = Double(totalBytesWritten)/Double(totalBytesExpectedToWrite) 
     print("\(downloadTask.originalRequest!.url!.absoluteString) \(progress)") 

     updateListCells() 
    } 

这里是我尝试更新我的细胞,使用户可以看到进度条慢慢成长 - 我已经子类化细胞:

func updateListCells() 
{ 
    if let table = listVC.myTableView { 
     if(!table.visibleCells.isEmpty) 
     { 
      for v in table.visibleCells { 
       let cell = v as! RSSTableViewCell 
       cell.updateLoader() 
      } 
     } 
    } 
} 

func updateLoader() 
    { 
     self.bringSubview(toFront: downloadLoader) 
     if(pathUrl != nil) 
     { 
      if(checkIfExists(url: pathUrl!)) 
      { 
       downloadLoader.progress = 1 
      } 
      else { 
       for d in downloadManager.operations { 
        if(URL(string: rssItem.link) == d.value.task.originalRequest?.url) 
        { 
         let progress = Double(d.value.task.countOfBytesReceived)/Double(d.value.task.countOfBytesExpectedToReceive) 
         //print("MATCH: ", d.value.task.countOfBytesSent) 
         downloadLoader.progress = Float(progress) 
        } 
       } 
      } 
     } 
     else { 
      downloadLoader.progress = 0 
     } 
    } 

但这并不连续工作。只有当我刷新tableview时,滑块才会采用当前的下载值。

如果下载正在发生,我该如何更新tableview单元格?

+0

不知道,但也许运行这个“downloadLoader.progress =浮动(进度)”在主线程将工作? – arvidurs

+0

你是什么意思?它将不得不重复设置到滑块,并且我不打算设置一个定时器来反复地做它 – skyguy

回答

0

您应该运行updateListCells()在主线程(如@arvidurs写道):

func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) { 
    let progress = Double(totalBytesWritten)/Double(totalBytesExpectedToWrite) 
    print("\(downloadTask.originalRequest!.url!.absoluteString) \(progress)") 
    DispatchQueue.main.async { 
     self.updateListCells() 
    } 
} 
+0

感谢你的支持,在路上。 – arvidurs

+0

不工作。只需清除所有未下载的其他单元,并且不会顺利下载 – skyguy

相关问题