在 IOS9 应用程序上工作,该应用程序在作为 NSURLSessionDelegate 的 Controller 中执行后台 URLSession。这是我如何开始的:
self.session_data = [[NSMutableData alloc] init];
NSURL *url = [NSURL URLWithString:src];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLSessionConfiguration *backgroundConfigObject = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier: @"myBackgroundSessionIdentifier"];
self.session = [NSURLSession sessionWithConfiguration: backgroundConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]];
self.download = [self.session dataTaskWithRequest: request ];
[self.download resume];
到目前为止一切顺利。我实现了三个委托(delegate)方法。首先调用“didReceiveData”,然后我存储数据。
- (void)URLSession:(NSURLSession *)session
dataTask:(NSURLSessionDataTask *)dataTask
didReceiveData:(NSData *)data{
NSLog(@"%s",__func__);
[self.session_data appendData:data];
}
紧接着“didCompleteWithError”被调用。永远不会调用“completionHandler”处理程序。
'didCompleteWithError' 消息令人困惑的是实际的错误对象是 nil。我见过一些类似的悬而未决的问题。加载时我不会离开 Controller / View 。我需要将该功能移至 AppDelegate 中吗?
最佳答案
Apple 文档说didCompleteWithError 报告仅 客户端错误,否则为零:
“服务器错误不会通过错误参数报告。您的委托(delegate)通过错误参数收到的唯一错误是客户端错误,例如无法解析主机名或连接到主机”
这是 link到文档。
如果你想检查其他错误,比如 session 错误,你必须实现 session 协议(protocol)委托(delegate)
- URLSession:didBecomeInvalidWithError:
有关详细信息,请参阅 this回答
关于ios - URLSession didCompleteWithError 无错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36505444/