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映射到下载状态。