我已经实现了一个在后台运行的NSURLSession(因此,即使该应用被暂停,它也可以使用系统守护进程来继续执行该任务)。问题是
-(void)URLSession:(NSURLSession *)session
dataTask:(NSURLSessionDataTask *)dataTask
didReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
从来没有被调用。我需要知道响应状态,以便可以正确处理上传失败。根据另一篇文章,一位苹果工程师告诉我们,当 session 为backgroundSession时,不会调用此委托(delegate)方法,以防止应用唤醒。关于如何解决这个问题有什么建议吗?我遇到的最后一个URLSession委托(delegate)方法是:
-(void)URLSession:(NSURLSession *)session
dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
最佳答案
上传完成后,应调用URLSession:task:didCompleteWithError:
的NSURLSessionTaskDelegate
方法。请引用task.response
对象,该对象应该是NSHTTPURLResponse
对象。
我确定您正在执行此操作,但是标准的后台上传任务组件是:
NSURLSessionConfiguration *backgroundConfiguration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.domain.app"];
NSURLSession *session = [NSURLSession sessionWithConfiguration:backgroundConfiguration delegate:self delegateQueue:[NSOperationQueue mainQueue]];
NSURLSession
方法uploadTaskWithRequest:fromFile:
方法:NSURLSessionTask *task = [session uploadTaskWithRequest:request fromFile:fileURL];
[task resume];
在后台 session 中,您必须:
NSURLSessionUploadTask
; NSData
的版本); 无法使用数据任务; (b)
NSData
的NSURLSessionUploadTask
呈现; (c)NSURLSessionUploadTask
的完成块翻译。 setHTTPBody
的NSMutableRequest
。使用上载任务时,请求的主体不能在请求本身中。 NSURLSessionDelegate
和NSURLSessionTaskDelegate
方法。 application:handleEventsForBackgroundURLSession:
(这样您就可以捕获completionHandler
,它将在URLSessionDidFinishEventsForBackgroundURLSession
中调用)。 关于ios - 如何获取backgroundSession NSURLSessionUploadTask响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22487336/