5

내 URL 세션을 구성하는 데 [NSURLSessionConfiguration defaultSessionConfiguration]을 사용합니다.NSURLSession에 잘못된 다시 시작 데이터가 있습니다.

cancelByProducingResumeData:을 호출하여 작업을 일시 중지하고 이력서 데이터를 생성 한 다음 디스크에 저장합니다. 작업을 다시 시작하려면 downloadTaskWithResumeData:으로 전화하십시오. 앱을 다시 시작할 때까지 제대로 작동합니다.

작업을 일시 중지 한 후 앱을 종료합니다. 그런 다음 내 앱을 다시 시작하고 downloadTaskWithResumeData으로 전화하면 이력서 데이터가 유효하지 않은 것으로 나타났습니다.

내가있는 NSDictionary에 이력서 데이터를 분석하고

"/private/var/mobile/Containers/Data/Application/5DD071C3-9D5E-4D76-9F74-57B6C92445CB/tmp/CFNetworkDownload_IUI6kg.tmp"NSURLSessionResumeInfoLocalPath를 얻을. 이 파일에 액세스하려고 시도했지만 존재하지 않습니다.

내 질문은 내 앱을 다시 시작한 후 데이터 재개를 사용하여 다운로드 작업을 계속하는 방법입니다.

감사합니다.

+0

감사합니다 @ 마크, 좋은 질문 : 그래서 그것은 작동합니까, 키 'NSURLSessionResumeInfoLocalPath'에 의해 샌드 박스에 기록 된 샌드 박스 경로를 업데이트합니다. 사용자가 응용 프로그램을 종료하면 디스크에 데이터를 쓰는 방법을 알려주시겠습니까? – NSPratik

답변

1

언제든지 앱을 다시 시작하면 tmp 아래의 모든 항목이 정리됩니다. 앱을 다시 시작할 때마다 * .tmp를 모두 복사하려고 했는데도 똑같은 문제가 발생했습니다. 오류가 발생하면

오류가 발생합니다.

내 충고는 * .tmp 파일에 액세스 할 수 있는지 확인한 후 시작에서 다시 다운로드하십시오.

+0

@ LittleBobyTables, 제 답변을 편집 해 주셔서 감사합니다. Mark, 나는 당신과 내가 무엇을 염두에두고 있었는지 달성하기 위해 [ASIHTTPRequest] (https://github.com/pokeb/asi-http-request)를 사용한다. –

+0

감사합니다. resumeData를 다시 작성하고 * .tmp 파일 경로를 바꿀 수 있습니까? – Mark

1

이 문제가 발생했습니다. iOS8에서 응용 프로그램을 다시 시작하면 샌드 박스 경로가 변경된다는 것을 알았습니다. 그러나 resumeData는 이전 샌드 박스 경로를 기록하므로 다운로드 작업에서 resumeData를 찾을 수 없습니다. - upvoted

NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:resumeDataPath]; 
NSString *resumeDataFileName = [dic[@"NSURLSessionResumeInfoLocalPath"] lastPathComponent]; 
NSString *newTempPath = NSTemporaryDirectory(); 
NSString *newResumeDataPath = [newTempPath stringByAppendingPathComponent:resumeDataFileName]; 
[dic setValue:newResumeDataPath forKey:@"NSURLSessionResumeInfoLocalPath"]; 
[dic writeToFile:resumeDataPath atomically:YES];