iOS 11ダウンロードのブレークポイント継続のバグ

1604 ワード

iOS 11がリリースされると、ダウンロード機能付きのアプリが横向きになることが多いかもしれません(ps:アップルのお父さんを数秒恨んでいます).ブレークポイントの再送信に使用されていたresumeDataに新しい値が付いていたため、この新しい値が現れると、何度か操作を一時停止した後にダウンロードタスクtaskの読み取りデータが間違ってしまい、ファイルがダウンロードされていない間にダウンロード完了時のエージェントメソッドが呼び出され、ダウンロードエラーが発生します.解決策についてお話しします.第1の方法:一時停止時に[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つ目は比較的難しいです.パートナーは状況に応じて適宜使用することができます.