iOS 11ダウンロードのブレークポイント継続のバグ
1604 ワード
iOS 11がリリースされると、ダウンロード機能付きのアプリが横向きになることが多いかもしれません(ps:アップルのお父さんを数秒恨んでいます).ブレークポイントの再送信に使用されていたresumeDataに新しい値が付いていたため、この新しい値が現れると、何度か操作を一時停止した後にダウンロードタスクtaskの読み取りデータが間違ってしまい、ファイルがダウンロードされていない間にダウンロード完了時のエージェントメソッドが呼び出され、ダウンロードエラーが発生します.解決策についてお話しします.第1の方法:一時停止時に
2つ目の方法:resumeDataの新しい値を除去します.1:最初のステップ:まずresumeDataをstringに変換します.
2:ステップ2:新しい値を削除
ステップ3:stringを新しいresumeDataに変換します.
後記:1つ目の方法は比較的簡単で、2つ目は比較的難しいです.パートナーは状況に応じて適宜使用することができます.
[task cancelByProducingResumeData:^(NSData *resumeData){ }];
を呼び出さずにsuspend
スレッドを呼び出す方法であり、この問題を解決することができる.2つ目の方法:resumeDataの新しい値を除去します.1:最初のステップ:まずresumeDataをstringに変換します.
NSString *dataString =[[NSString alloc]initWithData:resumeData encoding:NSUTF8StringEncoding];
2:ステップ2:新しい値を削除
NSString *string =[self cleanResumeDataWithString:dataString];
-(NSString *)cleanResumeDataWithString:(NSString *)dataString {
if([dataString containsString:@"NSURLSessionResumeByteRange "]) {
NSRange rangeKey = [dataString rangeOfString:@"NSURLSessionResumeByteRange "];
NSString *headStr = [dataString substringToIndex:rangeKey.location];
NSString *backStr = [dataString substringFromIndex:rangeKey.location];
NSRange rangeValue = [backStr rangeOfString:@"
\t"];
NSString *tailStr = [backStr substringFromIndex:rangeValue.location + rangeValue.length];
dataString = [headStr stringByAppendingString:tailStr];
}
return dataString;
}
ステップ3:stringを新しいresumeDataに変換します.
resumeData =[string dataUsingEncoding:NSUTF8StringEncoding];
後記:1つ目の方法は比較的簡単で、2つ目は比較的難しいです.パートナーは状況に応じて適宜使用することができます.