iOS – 后台会话不支持完成处理程序块。 代之以使用委托

我使用后台代码进行networking活动。 但是,我遇到了下面的崩溃日志错误。

完成处理程序块在后台会话中不受支持。 代之以使用委托。

请提供解决此问题的指针。

NSURLSessionConfiguration* config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier]; config.sessionSendsLaunchEvents = YES; config.allowsCellularAccess = YES; config.discretionary = YES; NSURLSession* session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil]; NSURLSessionDownloadTask* downloadTask = [session downloadTaskWithRequest:request]; [downloadTask resume]; 

崩溃日志

 0 CoreFoundation __exceptionPreprocess + 120 1 libobjc.A.dylib objc_exception_throw + 52 2 CFNetwork -[__NSURLBackgroundSession validateSerializabilityForRequest:completion:] + 196 3 CFNetwork -[__NSURLBackgroundSession _onqueue_downloadTaskForRequest:resumeData:completion:] + 48 4 CFNetwork __90-[__NSURLBackgroundSession downloadTaskForRequest:downloadFilePath:resumeData:completion:]_block_invoke + 32 5 CFNetwork __68-[__NSURLBackgroundSession performBlockOnQueueAndRethrowExceptions:]_block_invoke + 72 6 libdispatch.dylib _dispatch_client_callout + 12 7 libdispatch.dylib _dispatch_barrier_sync_f_invoke + 80 8 CFNetwork -[__NSURLBackgroundSession performBlockOnQueueAndRethrowExceptions:] + 148 9 CFNetwork -[__NSURLBackgroundSession downloadTaskForRequest:downloadFilePath:resumeData:completion:] + 188 ! 10 -[CRNSURLSessionTaskProxy initDownloadTaskWithSession:request:completionHandler:dispatch:] + 152 11 -[CRNSURLSessionProxy downloadTaskWithRequest:completionHandler:] + 108 12 -[CRNSURLSessionProxy downloadTaskWithRequest:] + 20 

你需要在你的downloadTask中添加一个委托,然后实现这里描述的委托方法: link

这里也是很好的教程: 链接