断点下载 怎么保存ResulmData的

[复制链接]
202 17
搞下载用的是NSURLSessionDataTask
这个类 和NSURLSessionDataTask的区别是 当我杀死程序 再次进入NSURLSessionDataTask可以设置请求头的Range字段接着下载
NSURLSessionDataTask这个需要ResulmData去恢复下载 这个resulmData也就是一个plist存储了下载的一些信息

现在有点蛋疼的地方是这个resulmData并不好获取 看到网上有一些方案是自己拼接这个resulmData的plist字符串 感觉有点麻烦

有无比较简洁的方案

举报 使用道具

回复

17 个评论

atai  新手上路  发表于 2018-5-12 00:17:53  | 显示全部楼层
是嘛   我记得以前试断点续传的时候这些试过可以   有空我再试试  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复
ahking  新手上路  发表于 2018-5-12 00:59:22  | 显示全部楼层
[[NSNotificationCenter defaultCenter] addObserver:_shareInstance selector:@selector(terminateAction:) name:UIApplicationWillTerminateNotification object:nil];

- (void)terminateAction:(NSNotification *)sender
{
    [self saveDownloadSource];
}

- (void)saveDownloadSource
{
    NSMutableArray *mArr = [[NSMutableArray alloc] initWithCapacity:1];
    for (QSPDownloadSource *souce in self.downloadSources) {
        if (souce.isOffLine) {
            
            [souce.task cancelByProducingResumeData:^(NSData * _Nullable resumeData) {
                NSLog(@"这个block不执行啊!");
            }];
            NSData *data = [NSKeyedArchiver archivedDataWithRootObject:souce];
            
            
            [mArr addObject:data];
        }
    }
   
    [mArr writeToFile:QSPDownloadTool_DownloadSources_Path atomically:YES];
}


cancelByProducingResumeData这个block块里面不执行呢

举报 使用道具

回复
showhe  新手上路  发表于 2018-5-12 01:02:48  | 显示全部楼层
这个库的下载写的可以的,比自己写方便很多,不知道他怎么实现的,而且下载地址变了的话,怎么样都做不到断点续传吧?

举报 使用道具

回复
kqzc  新手上路  发表于 2018-5-12 01:32:23  | 显示全部楼层
resumeData本身没什么问题  willTerminate的触发确实很蛋疼   还是用请求头加上Range吧 更方便

举报 使用道具

回复
332585951  新手上路  发表于 2018-5-12 01:50:13  | 显示全部楼层
这个方法我早就试过了 不成 这业内对此就没个简单明了的方案嘛 手动去搞苹果的resulmData难搞的很 并且他这个下载 是给下载到沙盒caches下的一个文件夹里 以tmp结尾的文件命名 知道下载结束 你去把他移动到合理的位置上

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复
honey13  新手上路  发表于 2018-5-12 02:00:43  | 显示全部楼层
我自己这块 搞出来两个版本了 一个是既能在线断点 也能离线断点 但是不能后台下载
                                              另一个是可以在线断点 可以后台下载 但是不能离线断点
老板的意思是.......      

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复
chamyto  新手上路  发表于 2018-5-12 02:39:19  | 显示全部楼层
不是有个代理方法吗
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didCompleteWithError:(nullable NSError *)error{
    NSLog(@"%@",error);
    if (error) {
        if ([error.userInfo objectForKey:NSURLSessionDownloadTaskResumeData]) {
            NSData *resumeData = [error.userInfo objectForKey:NSURLSessionDownloadTaskResumeData];
            //保存下载的data,下次启动程序再次下载
            if (resumeData) {
                [self saveResumeData:resumeData url:task.currentRequest.URL.absoluteString];
            }
        }
    }
}

举报 使用道具

回复
suwp2468  注册会员  发表于 2018-5-12 03:03:29  | 显示全部楼层
不杀死程序可以 一杀死程序就不成了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复
jackzhong  新手上路  发表于 2018-5-12 03:16:33  | 显示全部楼层
搞下载用的是NSURLSessionDataTask
这个类 和NSURLSessionDataTask的区别是 当我杀死程序 再次进入NSURLSessionDataTask可以设置请求头的Range字段接着下载
NSURLSessionDataTask这个需要ResulmData去恢复下载 这个resulmData也就是一个plist存储了下载的一些信息

现在有点蛋疼的地方是这个resulmData并不好获取 看到网上有一些方案是自己拼接这个resulmData的plist字符串 感觉有点麻烦

有无比较简洁的方案

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

ios.irunthink.com
搜索
热搜: iOS swift 下拉刷新

图文热点

更多

开发教程

更多

客服中心

400-800 周一至周日 9:30-17:30 仅收市话费

关注我们

  • 微信扫描
  • 关注微信
关于我们
关于我们
友情链接
联系我们
帮助中心
精贴推荐
源码上传
注册登录
服务支持
资源下载
关注我们
官方微博
官方空间
快速回复 返回顶部 返回列表