2015-02-06 71 views
5

我使用[NSURLSessionConfiguration defaultSessionConfiguration]來配置我的URL會話。帶有無效恢復數據的NSURLSession

我通過調用cancelByProducingResumeData:來暫停任務以生成恢復數據,並將其保存到磁盤。當我想重新啓動任務時,我打電話給downloadTaskWithResumeData:。它運行良好,直到我重新啓動應用程序。

我在暫停任務後終止了應用程序。然後我再次啓動我的應用程序,並撥打downloadTaskWithResumeData,我發現簡歷數據無效。

我解析恢復數據到NSDictionary中,並得到NSURLSessionResumeInfoLocalPath,這是

"/private/var/mobile/Containers/Data/Application/5DD071C3-9D5E-4D76-9F74-57B6C92445CB/tmp/CFNetworkDownload_IUI6kg.tmp"。我嘗試訪問這個文件,但它不存在。

我的問題是如何在重新啓動我的應用程序後使用簡歷數據繼續下載任務。

謝謝。

+0

感謝@馬克,很好的問題 - upvoted。你能告訴我如何在用戶退出應用程序時將數據寫入磁盤嗎? – NSPratik 2016-01-28 08:43:51

回答

1

無論何時重新啓動應用程序,tmp下的所有內容都將被清除,即使我嘗試複製所有* .tmp並在應用程序重新啓動時粘貼回來,它也會引發錯誤

我的建議是,你檢查* .tmp文件是否可訪問,如果不是從開始重新下載

+0

@LittleBobyTables,非常感謝編輯我的答案更好。馬克,我最終使用[ASIHTTPRequest](https://github.com/pokeb/asi-http-request)來實現您和我在心中的想法 – 2015-02-18 17:53:06

+0

感謝您的建議。我可以重建resumeData並替換* .tmp文件路徑嗎? – Mark 2015-03-04 09:15:10

1

我遇到了這個問題。我發現在iOS8中重新啓動應用程序後,沙箱路徑會發生變化。但resumeData記錄舊的沙箱路徑,即讓下載任務找不到resumeData。所以我更新的關鍵「NSURLSessionResumeInfoLocalPath」記錄在沙箱沙箱路徑,它的工作:

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];