Ios 在cell中下载进度

Ios 在cell中下载进度,ios,xcode,uitableview,asihttprequest,uiprogressview,Ios,Xcode,Uitableview,Asihttprequest,Uiprogressview,我正在尝试在UITableViewCell中开发一个进度视图 在我的第一次实现中,我在单元格中使用了AFHTTPRequestOperation及其setDownloadProgressBlock:^ 后来我的目标变得更复杂了。我有一个显示不同内容(歌曲播放列表)的UITableView。同一首歌可能存在于多个播放列表中。当我开始下载一个播放列表中的歌曲并切换到另一个播放列表(其中也包含此歌曲)时,我希望看到第一个播放列表中的下载进度 我成功地使它工作了。在下载过程的开始,我在全局类中创建了一个

我正在尝试在
UITableViewCell
中开发一个进度视图

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

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

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

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


我有点厌倦了实现这个东西,有没有办法让它正常工作?

你说得对,由于单元重复使用,不适合用下载进度回调连接每个单元。为了解决这个问题,我将把下载状态保存在您的
歌曲
对象中,当它设置为
YES
时,开始观察通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(progressDidUpdate:) name:kSongDownloadProgressUpdateNotificaton object:nil];
AFHTTPRequestOperation
的进程回调块中,发送带有歌曲id标识符的
名称:ksongDownloadProgressUpdateNotification

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

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

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

Song对象位于核心数据中。将进度存储在那里并将更新写入核心数据是一个好主意吗?@iWheelBuy您可以创建一个单独的NSMutableDictionary,将歌曲id映射到下载状态。