iOS 11 다운로드 의 정지점 전송 bug 해결 방법

1854 단어 iOS정지점 전송
iOS 11 이 발표 되면 다운로드 기능 이 있 는 앱 들 이 총 에 누 워 있 을 수도 있다(ps:애플 아빠 를 몇 초 동안 원망 한다).정지점 전송 을 위 한 resume Data 에 새 값 이 들 어 갔 기 때문에 이 새 값 이 나타 나 면 몇 번 의 작업 을 중단 한 후 작업 task 를 다운로드 하여 데 이 터 를 읽 는 것 이 잘못 되 고 파일 이 다운로드 되 지 않 았 을 때 다운로드 완료 시의 프 록 시 방법 을 호출 하여 하 재 오류 가 발생 할 수 있 습 니 다.다음은 해결책 을 말씀 드 리 겠 습 니 다.
첫 번 째 방법:일시 정지 시[task cancelByProducingResumeData:^(NSData*resumeData){}]를 호출 하지 않 습 니 다.suspend 스 레 드 를 연결 하 는 방법 으로 이 문 제 를 해결 할 수 있 습 니 다.
두 번 째 방법:resume Data 의 새로운 값 을 제거 합 니 다.
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>
\t"]; NSString *tailStr = [backStr substringFromIndex:rangeValue.location + rangeValue.length]; dataString = [headStr stringByAppendingString:tailStr]; } return dataString; }
STEP 3:string 을 새로운 resume Data 로 변환 합 니 다.

resumeData =[string dataUsingEncoding:NSUTF8StringEncoding];
후기:첫 번 째 방법 은 상대 적 으로 간단 하고 두 번 째 방법 은 상대 적 으로 어렵다.어린 동 료 는 상황 에 따라 참작 하여 사용 할 수 있다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기