我正在运行后台 NSURLSession 会话,并且正在尝试找出一种方法来从 NSURLDownloadTaskDelegate 回调之一中获取 JSON 响应。我已将会话配置为接受 JSON 响应。
NSURLSessionConfiguration *backgroundSession = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.Att.Locker.BackgroundUpload"];
backgroundSession.HTTPAdditionalHeaders = @{ @"Accept":@"application/json"};
session = [NSURLSession sessionWithConfiguration:backgroundSession delegate:uploader delegateQueue:nil];
我可以使用以下回调轻松解析 NSURLSessionDownloadTasks 的 JSON 响应。它将 JSON 响应以 NSURL 的形式写入沙箱。
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
//Reading the Json response from the sandbox using the NSURL parameter
}
我的问题是,如果我遇到错误,则不会调用上面的回调,它似乎只有在成功下载的情况下才会被调用。由于我使用的是后台会话,因此我无法使用任何 NSURLSessionDataDelegate 回调。我只能使用 NSURLSessionDownloadTaskDelegate 和 NSURLSessionTaskDelegate,而我可以使用以下回调获取任务响应。我在响应中没有看到 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]);
}
NSURL连接 has a 接收到数据参数给了我们一个NSData我们可以使用它来获取 JSON 响应的对象。我在委托回调中没有看到这一点NSURL会话除了NSURL数据任务但是我们不能在后台使用数据任务,那么我们应该如何获取 JSON 响应呢?任何帮助表示赞赏
EDIT:
我通常在后台运行应用程序时遇到此问题(主要是当它被踢出内存而不仅仅是挂起时)。我已经在 appDelegate 中实现了回调,并且能够重新与会话关联。我认为 didFinishDownloadingToURL 仅在成功完成任务的情况下才会被调用,但是当任务失败时,不会调用保证它会被调用,但另一方面 didCompleteWithError 会在每次失败时被调用