文件下载研究了几天
有两个问题始终绕不过去
什么时候是ui中的等待中?
什么时候是ui中的下载中?
后台下载怎么处理
苹果所暴露出来的代理
只有下载进度
下载完成数据
相关的代理
typedef NS_OPTIONS(NSUInteger, WHCDownloadState) {
WHCNone = 1 << 0,
WHCDownloading = 1 << 1,
WHCDownloadCompleted = 1 << 2,
WHCDownloadCanceled = 1 << 3,
WHCDownloadWaitting = 1 << 4
};
什么意思呢 这里的loading waiting 状态 都是不会存在的
只有none completed cancel 三种状态
分别对应
什么操作也没用
下载完成
下载到一半没有继续下了
这三种状态 ,至于本地什么状态也不存
当重新从缓存数据库中读取的时候
根据本地模型的
当前下载的大小 和需要下载的大小比对
当两个大小相同 ,代表下载完成
当小于需要下载的大小,代表任务取消了。对应任务暂停
剩下的就是什么操作也没有了
_downloadState = _totalLenght != 0 ? (self.currentDownloadLenght == self.totalLenght ? WHCDownloadCompleted : WHCDownloadCanceled) : WHCNone;
其余的东西呢
应该全部去ui里面处理
如果是cell 就去cell 里面处理状态
首先设置初始状态
只要不是完成状态 或者取消状态
都设置成为等待状态
再判断一下当前队列里面有没有取消状态的
也设置成为等待状态
接收到进度条反馈代理的时候
改为loading状态
接收到完成代理
判断是否成功
成功改为complete状态
失败改为cancel状态
接收到error代理
就把任务变为none状态
这些状态都是ui的
这样做出来就能保证UI上没有问题了。
也不需要维护什么等待队列和进行队列这些东西了。、、
这个和我很久之前的录音上传的思路是一样的
突然强退的任务是不存在上传中这样的状态的
因此只有默认的上传失败 和上传成功两种状态在本地
而后台下载更甚 什么状态我都不存,存了我也不判断
而是通过读取了多少数据来判断状态到哪里了。
这才是最简单的结题思路呀。