Nik*_* M. 9 ios ios7 nsurlsession
我已经实现了一个在后台运行的NSURLSession(因此即使应用程序被挂起,它也可以使用系统守护程序继续执行任务).问题是
-(void)URLSession:(NSURLSession *)session
dataTask:(NSURLSessionDataTask *)dataTask
didReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
Run Code Online (Sandbox Code Playgroud)
永远不会被称为.我需要知道响应状态,以便我能正确处理上传失败.根据另一篇文章,一位Apple工程师告诉我,当session为backgroundSession时,不会调用此委托方法来阻止应用程序唤醒.关于如何解决这个问题的任何建议?在我的情况中调用的最后一个URLSession委托方法是:
-(void)URLSession:(NSURLSession *)session
dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
Run Code Online (Sandbox Code Playgroud)
Rob*_*Rob 14
该URLSession:task:didCompleteWithError:方法NSURLSessionTaskDelegate,当你上传成功后应该叫.请参阅task.response对象,该对象应该是NSHTTPURLResponse对象.
我确定你这样做,但标准的后台上传任务组件是:
进行后台会话:
NSURLSessionConfiguration *backgroundConfiguration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.domain.app"];
NSURLSession *session = [NSURLSession sessionWithConfiguration:backgroundConfiguration delegate:self delegateQueue:[NSOperationQueue mainQueue]];
Run Code Online (Sandbox Code Playgroud)使用NSURLSession方法uploadTaskWithRequest:fromFile:方法:
NSURLSessionTask *task = [session uploadTaskWithRequest:request fromFile:fileURL];
[task resume];
Run Code Online (Sandbox Code Playgroud)
通过后台会话,您必须:
使用NSURLSessionUploadTask;
使用基于文件的再现(您不能使用NSData基于版本);
使用基于委托的再现不能使用数据任务; (b)NSData引渡NSURLSessionUploadTask; 也不是(c)完成块的再现NSURLSessionUploadTask.
随着上传任务,确保不叫setHTTPBody的NSMutableRequest.使用上传任务,请求正文不能在请求本身中.
确保你实现相应的NSURLSessionDelegate,NSURLSessionTaskDelegate方法.
确保application:handleEventsForBackgroundURLSession:在您的应用程序委托中实现(这样您就可以捕获completionHandler,您将调用它URLSessionDidFinishEventsForBackgroundURLSession).
| 归档时间: |
|
| 查看次数: |
5237 次 |
| 最近记录: |