URLSession didCompleteWithError nil错误

Sta*_*ers 5 networking objective-c ios ios9

在正在作为NSURLSessionDelegate的控制器中执行后台URLSession的IOS9应用程序上工作。这是我的启动方式:

    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];
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好。我实现了三种委托方法。首先调用“ didReceiveData”,然后存储数据。

- (void)URLSession:(NSURLSession *)session
      dataTask:(NSURLSessionDataTask *)dataTask
     didReceiveData:(NSData *)data{

   NSLog(@"%s",__func__);
   [self.session_data appendData:data];
}
Run Code Online (Sandbox Code Playgroud)

在那之后,立即调用“ didCompleteWithError”。永远不会调用'completionHandler'处理程序。

关于“ didCompleteWithError”消息的困惑在于,实际的错误对象为nil。我已经看到一些类似的未解决的问题。加载时我不会离开控制器/视图。我需要将该功能移至AppDelegate吗?

chr*_*ini 6

苹果医生说didCompleteWithError 报告客户端错误,否则为nil:

“服务器错误不会通过error参数报告。您的委托通过error参数接收的唯一错误是客户端错误,例如无法解析主机名或无法连接到主机。”

这是文档的链接

如果要检查其他错误,例如会话错误,则必须实现会话协议委托

- URLSession:didBecomeInvalidWithError:
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅答案