7

我有 NSURLSession 正在下载多个文件。我正在为 ios 8 更新一个 ios 7 应用程序。它在 ios 7 中运行良好,但在针对 ios 8 进行编译时

URLSessionDidFinishEventsForBackgroundURLSession: 

永远不会被调用。

我挖得更深了

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location

-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error

我正在检查会话中剩余的下载任务:

[self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks){ ...}

在调用的最后一个代理肉类方法中,downloadTasks 数组中始终存在一个元素。奇怪的是,这个下载任务并不总是引用同一个文件,并且该任务的状态显示下载完成。

同样,在 ios7 中工作正常。问题仅发生在 ios 8 中。

4

2 回答 2

2

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

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

您可以在Apple 论坛或此博客文章中找到完整的讨论

于 2014-09-24T09:56:11.437 回答
-1

确保你打电话

 if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
        [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
    }

在你的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

这应该在设备上修复它,但模拟器有一个不允许它工作的错误。

于 2015-02-12T21:36:00.237 回答