在我的應用程序中,我在後臺使用了NSURLSessionDownloadTask
。當應用程序處於前臺時,我將恢復一個下載任務。稍後,當應用程序再次處於後臺時,該下載任務將完成,並且在功能didCompleteError
中,我希望在應用程序仍處於後臺時創建另一個下載任務。但下載任務不運行。誰能幫我?ios - 在後臺創建會話下載任務
回答
試試這個代碼:
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
不像NSURLConnection
,我們通常創建每個請求的連接,與NSURLSession
,我們創建一個會話,而是有多個任務。
所以,讓我們定義我們的會議:
NSURLSessionConfiguration* config = [NSURLSessionConfiguration backgroundSessionConfiguration:@「myUniqueAppID」];
_session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
我們正在做的第一,是創建一個配置,這將允許它在後臺運行。該配置需要一個專用於您的應用的唯一標識符。使用應用程序的包標識符是很好的做法,比如com.yourCompany.appName
一旦我們有了我們的配置,我們就可以實例化我們的會話,在那裏我們傳遞給委託的引用以及我們希望它運行的隊列。你最喜歡的將會是這個mainQueue。
有關此主題的目的,我們將只黏合下載任務。所以,一旦你知道該網址,您要下載的文件,你可以通過你的會話創建downloadTask:
NSURLSessionDownloadTask* task = [_session downloadTaskWithRequest:request];
[task resume];
現在的樣子,NSURLSession
的作品,是它直接下載文件到臨時目錄。所以你不必擔心存儲它。
雖然它的下載,雖然,它會通知你多少已經被下載,這是偉大的通知的下載進度用戶:
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
CGFloat percentDone = (double)totalBytesWritten/(double)totalBytesExpectedToWrite;
// Notify user.
}
一旦文件被下載了以下方法將被調用:
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
{
// Either move the data from the location to a permanent location, or do something with the data at that location.
}
該方法的最後一個參數是數據下載到的位置。從這裏,你可以將文件移動到一個永久的地方,在那裏你可以使用它,或者你可以訪問數據並對它做些什麼。但是,這些數據不會留在那裏,所以如果你真的需要它,請確保不要離開它。
值得一提的是任務,就像一個NSURLConnection
可以取消:
[_currentTask cancel];
這大約佔地下載使用NSURLSession文件的基礎知識。
我希望你覺得這個有用!
感謝您的幫助。我的應用程序運行良好,與您的指南相同的代碼。 。但我想問在後臺應用程序,我恢復另一個下載任務。在模擬器上,下載任務恢復正常,但在設備上,下載任務不能恢復。 – AChen
如果此代碼對您有幫助,請接受我的回答。 –
設備中發生了什麼錯誤? –
- 1. iOS上的後臺任務
- 2. 下載任務是空的第一個請求時,當在後臺IOS IOS
- 3. 創建循環後臺任務
- 4. 在後臺運行任務iOS
- 5. nhibernate當前會話在後臺線程上創建後丟失
- 6. 後臺任務
- 7. Rails如何爲heroku上的rake任務創建後臺任務?
- 8. 如何創建rake任務的後臺任務?
- 9. 從NSData上傳任務不支持在後臺會話
- 10. 在後臺狀態下安排重新開始任務。 (iOS)
- 11. 舊會話超時後創建會話
- 12. 在後臺執行任務
- 13. iOS SDK註銷後臺和會話
- 14. Phonegap後臺任務
- 15. 後臺任務iPhone
- 16. Swift - 在後臺下載NSURLSession?
- 17. 如何在後臺執行完成的下載任務?
- 18. iOS的後臺任務完成編程
- 19. NSOperation和NSOperationQueue的後臺任務iOS
- 20. iOS中的經常性後臺任務
- 21. iOS的後臺任務沒有完成
- 22. 使用NSURLSessionDataTask的iOS後臺任務
- 23. AVAudioPlayer後臺任務不工作[的iOS]
- 24. iOS 7使用NSURLSession的後臺任務
- 25. iOS後臺任務/推送通知
- 26. iOS上的後臺任務計時器
- 27. 用戶會話中的後臺任務或異步任務Spring MVC
- 28. AFNetworking 2.0.0在後臺下載
- 29. 如何從MVC3中的後臺任務訪問會話(StructureMap)
- 30. 如何在.NET MVC中爲後臺任務創建專用任務?
你需要在你的問題中包含相關的代碼。 – ajshort
in func didCompleteError,我創建了下載任務: dispatch_async(dispatch_get_main_queue(),^ { NSURLSessionDownloadTask * downloadTask = [self.session downloadTaskWithResumeData:movie。resumeData]; [downloadTask resume]; }); 當我在模擬器或Xcode設備上調試時,下載任務恢復。但在沒有xcode的設備上運行,下載任務不運行。 – AChen