2016-12-18 44 views
2

我們最近遷移從AFHTTPRequestOperationAFNetworking 3使用AFURLSessionManagerNSURLSessionDownloadTasķ。我們的用戶可以選擇下載最多可包含約5,000個文件的項目。許多任務(NSURLSessionDownloadTask)與背景會話導致失敗使用AFNetworking

這些文件主要是PDF和MP4,大小範圍從10 KB到1 GB。作爲遷移使用NSURLSessionAFURLSessionManager的一部分,我們很高興能夠在應用程序進入後臺時允許下載繼續下載到系統中。但是,我們遇到的是這些下載將開始失敗的

失去了連接到後臺傳輸服務

- 或 -

「沒有這樣的文件的錯誤信息或目錄「

當用戶選擇向上下載500個文件,這可能會發生在後臺或前臺的應用程序。然後我們會收到有關任何未來下載的這些錯誤消息,直到我們終止並重新啓動應用

任何想法,如果這是一個限制的iOS和NSURLSession背景配置,或者我們應該能夠得到它的工作?

我們AFURLSessionManager看起來像這樣:

NSURLSessionConfiguration *configuration = 
[NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.our.app.identifier.downloads"]; 
[configuration setHTTPMaximumConnectionsPerHost:5]; 
AFURLSessionManager *sessionManager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; 
[sessionManager setCompletionQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)]; 

而任務是這樣的:

NSURLSessionDownloadTask *downloadTask = [self.sessionManager downloadTaskWithRequest:[self requestForItem:item] progress:nil 

destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { 

    NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    return [NSURL fileURLWithPath:[filePath stringByAppendingPathComponent:@"fileid.ext"]]; 

} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { 

    // check for error and notify the ui of completion 

}]; 
+0

我只是想爲新用戶說這是一個出色的格式化問題。希望我能更多地幫助你。 –

回答

0

IIRC,在火焰NSURLSession爆炸,如果你嘗試添加多了幾個對會話有十幾項任務。當你達到500時,你幾乎肯定會打破它。這是一個已知的錯誤,因爲堆棧溢出的其他人已經遇到它並提出了一些錯誤。也就是說,請提出一個錯誤,因爲蘋果獲得的這個問題越多,它的優先級就越高。

通常的解決方法是保留掛起請求的外部隊列,然後在其他任務完成時將任務添加到會話中。