iOS11 下載之?dāng)帱c(diǎn)續(xù)傳的bug的解決方法
iOS11發(fā)布之后,可能很多帶有下載功能的APP都會(huì)躺槍(ps:埋怨蘋果爸爸幾秒鐘)。因?yàn)樵扔脕碜鰯帱c(diǎn)續(xù)傳的resumeData里帶上了一個(gè)新值,而這個(gè)新值的出現(xiàn),會(huì)導(dǎo)致幾次暫停操作后下載任務(wù)task讀取數(shù)據(jù)不對(duì),而且在文件還沒下載完時(shí)就會(huì)調(diào)用下載完成時(shí)的代理方法,導(dǎo)致下載出錯(cuò)。下面就來說說解決的辦法。
第一種方法:暫停時(shí)不調(diào)用[task cancelByProducingResumeData:^(NSData *resumeData){ }];而是調(diào)用suspend線程掛起的方法,可解決這個(gè)問題。
第二種方法:去除resumeData里的新值。
1:第一步:先把resumeData轉(zhuǎn)成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轉(zhuǎn)成新的resumeData。
resumeData =[string dataUsingEncoding:NSUTF8StringEncoding];
后記:第一種方法相對(duì)簡單,第二種相對(duì)有難度些。小伙伴可根據(jù)情況酌情使用。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- iOS實(shí)現(xiàn)文件切片儲(chǔ)存并且上傳(仿斷點(diǎn)續(xù)傳機(jī)制)
- iOS開發(fā)網(wǎng)絡(luò)編程之?dāng)帱c(diǎn)續(xù)傳
- 總結(jié)iOS開發(fā)中的斷點(diǎn)續(xù)傳與實(shí)踐
- iOS NSURLSessionDownloadTask實(shí)現(xiàn)文件斷點(diǎn)下載的方法
- iOS利用AFNetworking3.0——實(shí)現(xiàn)文件斷點(diǎn)下載
- iOS開發(fā)-實(shí)現(xiàn)大文件下載與斷點(diǎn)下載思路
- iOS開發(fā)網(wǎng)絡(luò)篇—實(shí)現(xiàn)大文件的多線程斷點(diǎn)下載
- iOS使用NSURLConnection實(shí)現(xiàn)斷點(diǎn)續(xù)傳下載
相關(guān)文章
iOS數(shù)據(jù)持久化UserDefaults封裝器使用詳解
這篇文章主要為大家介紹了iOS數(shù)據(jù)持久化UserDefaults封裝器使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02設(shè)計(jì)模式中的Memento備忘錄模式的在iOS App開發(fā)中的運(yùn)用
這篇文章主要介紹了設(shè)計(jì)模式中的Memento備忘錄模式的在iOS App開發(fā)中的運(yùn)用,Memento著重于捕獲和具體化當(dāng)前對(duì)象的內(nèi)部狀態(tài),需要的朋友可以參考下2016-03-03詳解iOS AFNetworking取消正在進(jìn)行的網(wǎng)絡(luò)請(qǐng)求
這篇文章主要介紹了詳解iOS AFNetworking取消正在進(jìn)行的網(wǎng)絡(luò)請(qǐng)求,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06