在单元格中下载进度

我想在UITableViewCell里面开发一个进度视图。

在我的第一个实现中,我使用AFHTTPRequestOperation和它的setDownloadProgressBlock:^在我的单元格内。

后来我的目标变得更加复杂了。 我有一个UITableView显示不同的内容(歌曲播放列表)。 同一首歌曲可能会出现在几个播放列表中。 当我开始在一个播放列表中下载歌曲并切换到另一个(其中也包含这首歌曲)时,我想要看到第一个播放列表中的下载进度。

我已经成功地使它工作。 在下载过程开始时,我在全局类中创build了一个进度视图。 为了显示这个单元格的进度视图,我只使用addSubview removeFromSuperview 。 但我不喜欢这种方式,因为我必须在现有进度视图之上添加进度视图(因为每个单元都有自己的进度视图,因为应用程序devise)。

现在我使用另一种方法。 当我显示单元格时,我将setDownloadProgressBlock:^设置为现有的进度视图。 我工作正常,但是当我打开另一个播放列表时,进度显示在另一首歌曲上。 我敢打赌,这是因为我使用的可重复使用的细胞。

我有点厌倦了实现这个东西,任何想法如何使其正常工作?

你是对的,由于单元格的重用,连接每个单元和下载进度callback是不正确的。 为了解决这个问题,我将在Song对象中保存下载状态,当它设置为YES ,开始观察通知。

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(progressDidUpdate:) name:kSongDownloadProgressUpdateNotificaton object:nil]; 

AFHTTPRequestOperation的进度callback模块中,发出一个name:kSongDownloadProgressUpdateNotificaton和一个歌曲ID标识符。

progressDidUpdate:个别单元格中,确定它自己正在更新的进度,如果没有忽略它,如果是的话,更新单元格中的progressView。 下载完成后,删除通知的观察。

此外,由于当UITableView调用cellForRowAtIndexPathSong将随时分配给另一个单元格时,您需要在Song对象中保存一个下载百分比数据,保存和恢复进度将使下载状态保持不变。