NSURLSessionDownloadTaskDelegate JSON响应
我正在运行一个NSURLSession会话的背景,我试图找出一个方法来获取NSURLDownloadTaskDelegatecallback之一的JSON响应。 我已经configuration我的会话接受JSON响应。
NSURLSessionConfiguration *backgroundSession = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.Att.Locker.BackgroundUpload"]; backgroundSession.HTTPAdditionalHeaders = @{ @"Accept":@"application/json"}; session = [NSURLSession sessionWithConfiguration:backgroundSession delegate:uploader delegateQueue:nil];
我可以使用下面的callback来轻松parsingNSURLSessionDownloadTasks的JSON响应。 它以NSURL的forms将JSON响应写入沙箱。
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location { //Reading the Json response from the sandbox using the NSURL parameter }
我的问题是,如果我遇到一个错误,上面的callback没有被调用,似乎只有在下载成功的情况下被调用。 由于我使用后台会话,我不能使用任何NSURLSessionDataDelegatecallback。 我只能使用NSURLSessionDownloadTaskDelegate和NSURLSessionTaskDelegate,而我可以使用下面的callback获得任务响应。 我在响应中看不到JSON。
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { NSHTTPURLResponse *response = (NSHTTPURLResponse *)downloadTask.response; NSDictionary *httpResponse = [response allHeaderFields]; NSLog(@"Response Header Fields:%@",[httpResponse allKeys]); }
NSURLConnection有一个didReceiveData参数,它给了我们一个NSData对象,我们可以使用它来获得JSON响应。 我没有看到在NSURLSession的委托callback,除了NSURLDataTask,但我们不能在后台使用数据任务,所以我们应该如何获得JSON响应? 任何帮助表示赞赏
编辑:
我经常遇到这个问题,而我在后台运行应用程序(主要是当它被踢出内存,而不是暂停)。 我已经在appDelegate中实现了callback,我可以重新关联session.I认为didFinishDownloadingToURL只是在成功完成任务的情况下调用,但是当任务失败时,不保证它将被调用,但在每当出现故障时,另一方面didCompleteWithError被调用
使用下载任务,您可以使用didFinishDownloadingToURL
获取数据。
所有的NSURLSession任务也有这个委托。 如果你进来,错误不是零,那么你有一个错误。 它不需要完成进入这里。 如果它在这里出现错误,那么委托didFinishDownloadingToURL
将不会被调用。
如果没有错误,并且您的所有数据下载都将被调用。
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { NSLog(@"didCompleteWithError"); }
编辑:
所以有些事情不得不正确设置,因为必须有一种方法来获取数据。
你是否正在实现应用程序:handleEventsForBackgroundURLSession:completionHandler :在你的AppDelegate中,你的应用程序将挂钩到完成处理程序以获取委托调用?
我强烈build议观看2013年WWDC会议#705, “基础networking的新进展” 。 后台会话讨论在大约32分钟开始,代码演示在37:50左右开始
- 断点在Xcode 7中没有被击中
- iOS上的Facebook连接 – 图片不会显示墙贴
- 从今天的date构build一个NSDate和一个string与时间
- 我可以为CATransition设置最大的alpha值吗?
- 改变UIView的边界并让UICollisionBehavior对它作出反应
- 如何在旋转的UIView中使用CGRectContainsPoint()
- 使用AFNetworking 3将当前位置发送到服务器以及在后台运行应用程序
- 编程语言的力量将在2018年引起关注
- 使用后端Spring Security Java EE服务器和前端iOS Objective-C客户端进行身份validation