NSURLSession URLSessionDidFinishEventsForBackgroundURLSession处理程序从未调用ios 8.确定在ios 7中

nwa*_*les 7 nsurlsession nsurlsessiondownloadtask ios8

我有NSURLSession正在下载多个文件.我正在为ios 8更新ios 7应用程序.它在ios 7中工作正常,但是当符合ios 8时代表meathod

URLSessionDidFinishEventsForBackgroundURLSession: 
Run Code Online (Sandbox Code Playgroud)

永远不会被称为.

我挖得更深一些

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
Run Code Online (Sandbox Code Playgroud)

-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
Run Code Online (Sandbox Code Playgroud)

委托meathods我正在检查剩余下载任务的会话:

[self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks){ ...}
Run Code Online (Sandbox Code Playgroud)

在最后一个委托meathod上,在downloadTasks数组中总会有一个元素重新出现.奇怪的是,此下载任务并不总是引用同一文件,并且该任务的状态显示下载已完成.

再次,在ios7中工作正常.仅在ios 8中出现问题.

Kru*_*lur 2

我假设您正在 iOS 模拟器上进行测试。如果是,则另一个错误是导致此不当行为的原因。iOS8 模拟器永远不会真正后台应用程序,因此完成处理程序不会触发。

尝试在设备上运行,它会起作用。

您可以在Apple 论坛或这篇博文中找到完整的讨论