下载单元格中的进度

时间:2013-02-02 03:37:07

标签: ios xcode uitableview asihttprequest uiprogressview

我正在尝试在UITableViewCell内开发进度视图。

在我的第一次实现中,我在我的单元格中使用了AFHTTPRequestOperation及其setDownloadProgressBlock:^

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

我成功地使它发挥作用。在下载过程开始时,我在全局类中创建一个进度视图。要在单元格上显示此进度视图,我只使用addSubview removeFromSuperview。但我不喜欢这种方式,因为我必须在现有进度视图的基础上添加进度视图(因为应用程序设计,每个单元格都有自己的进度视图)。

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

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

1 个答案:

答案 0 :(得分:1)

你是对的,由于重复使用单元,使用下载进度回调连接每个单独的单元是不合适的。要解决此问题,我会在Song对象中保存下载状态,当它设置为YES时,会开始观察通知。

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

AFHTTPRequestOperation的进度回调块中,发送带有歌曲ID标识符的name:kSongDownloadProgressUpdateNotificaton

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

此外,您需要在Song对象中保存下载百分比数据,因为UITableView调用cellForRowAtIndexPathSong将随时分配给另一个单元格,从而保存并恢复进度将使下载状态持久。