2017-09-14 11 views
0

私が試した最初の方法は、レイアウトを中断することによってエラーが発生しましたが、基本的にはここで私の問題です:セルにすべてスライダ/進捗ビューがあるテーブルビューを持っています。これらのスライダーの値は、ユーザーがダウンロードした場合、添付されたアイテム(RSSアイテムを各セル、その音楽に割り当てる)のダウンロードしたパーセントに等しい必要があります。私はここでダウンロードの進捗状況についての観察者にこのFUNCを呼び出しています複数のテーブルセルのスライダを連続的に更新するにはどうすればいいですか?

:ここ

//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 
     } 
    } 

しかし、これは連続的には機能しません。テーブルビューをリフレッシュする場合のみ、スライダは現在のダウンロード値を引き継ぎます。

ダウンロードが行われている場合、どのようにしてテーブルビューセルを連続的に更新できますか?

+0

わからないが、多分メインスレッドでは、この「downloadLoader.progress =フロート(進捗状況)」を実行すると動作します? – arvidurs

+0

どういう意味ですか?それはスライダーに繰り返し設定する必要があり、私は繰り返し何かを行うためにタイマーを設定するつもりはありません – skyguy

答えて

0

あなたがメインスレッド(@arvidursが書いたように)でupdateListCells()を実行する必要があります

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

関連する問題