iOS11 下载之断点续传的bug的解决方法
2019/7/9 22:49:40
本文主要是介绍iOS11 下载之断点续传的bug的解决方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
iOS11发布之后,可能很多带有下载功能的APP都会躺枪(ps:埋怨苹果爸爸几秒钟)。因为原先用来做断点续传的resumeData里带上了一个新值,而这个新值的出现,会导致几次暂停操作后下载任务task读取数据不对,而且在文件还没下载完时就会调用下载完成时的代理方法,导致下载出错。下面就来说说解决的办法。
第一种方法:暂停时不调用[task cancelByProducingResumeData:^(NSData *resumeData){ }];而是调用suspend线程挂起的方法,可解决这个问题。
第二种方法:去除resumeData里的新值。
1:第一步:先把resumeData转成string。
NSString *dataString =[[NSString alloc]initWithData:resumeData encoding:NSUTF8StringEncoding];
2:第二步:再去除里面的新值
NSString *string =[self cleanResumeDataWithString:dataString]; -(NSString *)cleanResumeDataWithString:(NSString *)dataString { if([dataString containsString:@"<key>NSURLSessionResumeByteRange</key>"]) { NSRange rangeKey = [dataString rangeOfString:@"<key>NSURLSessionResumeByteRange</key>"]; NSString *headStr = [dataString substringToIndex:rangeKey.location]; NSString *backStr = [dataString substringFromIndex:rangeKey.location]; NSRange rangeValue = [backStr rangeOfString:@"</string>\n\t"]; NSString *tailStr = [backStr substringFromIndex:rangeValue.location + rangeValue.length]; dataString = [headStr stringByAppendingString:tailStr]; } return dataString; }
第3步:把string转成新的resumeData。
resumeData =[string dataUsingEncoding:NSUTF8StringEncoding];
后记:第一种方法相对简单,第二种相对有难度些。小伙伴可根据情况酌情使用。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持找一找教程网。
这篇关于iOS11 下载之断点续传的bug的解决方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12Axios库资料:新手入门必读教程
- 2024-11-11Axios库项目实战:新手入门教程
- 2024-09-29Axios库教程:初学者必备指南
- 2024-08-29Axios库资料:新手入门指南与基本使用教程
- 2024-03-14system bios shadowed
- 2024-03-14gabios
- 2024-02-07iOS应用提交上架的最新流程
- 2024-02-06打包 iOS 的 IPA 文件
- 2023-12-07uniapp打包iOS应用并通过审核:代码混淆的终极解决方案 ?
- 2023-11-25uniapp IOS从打包到上架流程(详细简单) 原创