Ios8 NSURLSession URLSessiondFinisheventsforBackgroundURLSession处理程序从未调用ios 8。ios 7中的OK

Ios8 NSURLSession URLSessiondFinisheventsforBackgroundURLSession处理程序从未调用ios 8。ios 7中的OK,ios8,nsurlsession,nsurlsessiondownloadtask,Ios8,Nsurlsession,Nsurlsessiondownloadtask,我有一个正在下载多个文件的NSURLSession。我正在为ios 8更新ios 7应用程序。它在ios 7中工作得很好,但是当符合ios 8的要求时,委托人会采取行动 URLSessionDidFinishEventsForBackgroundURLSession: 从来没有人打过电话 我在地上挖得更深一点 -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadT

我有一个正在下载多个文件的NSURLSession。我正在为ios 8更新ios 7应用程序。它在ios 7中工作得很好,但是当符合ios 8的要求时,委托人会采取行动

URLSessionDidFinishEventsForBackgroundURLSession: 
从来没有人打过电话

我在地上挖得更深一点

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

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

[self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks){ ...}
在调用的最后一个委托方法中,downloadTasks数组中始终有一个元素在等待。奇怪的是,此下载任务并不总是引用同一个文件,并且该任务的状态显示下载已完成


同样,在ios7中工作良好。问题仅在ios 8中出现。

我认为您正在ios模拟器上进行测试。如果是,则另一个bug应对这种错误行为负责。iOS8模拟器永远不会对应用程序进行真正的后台处理,因此不会触发完成处理程序

尝试在设备上运行,它将正常工作

您可以在或中找到完整的讨论,请务必致电

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

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

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

我可以确认这个问题。总有一项任务会破坏实现。苹果论坛上也在讨论这个问题:-似乎有漏洞被归档了:在模拟器或设备上运行时它不起作用。我正在用xcode 5.1编译针对ios 7的应用程序,并安装在ios 8设备上。我也有同样的问题,有消息吗?@nwales你到底在做什么?仅当应用程序处于后台、仍在运行或被iOS终止时,处理程序才会触发。如果您从任务切换程序手动终止它,它将不会触发。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions