ios - URLSession didCompleteWithError 无错误

标签 ios objective-c networking ios9

在 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/

相关文章:

c++ - 这是合法的 C++ 代码吗?

ios - 状态栏和颜色命令问题

android - 适用:iOS 7.1 支持 MKMapItem

ios - NSLayoutConstraint 以编程方式设置 View 框架

python套接字错误: AF_INET address must be tuple,不是str

ios - Swift:获取移动数据权限状态

ios - 自定义键盘涵盖标准输入 View

ios - 使用 UICollectionView 切换单元格

objective-c - 在 Cocoa 应用程序中使用异常处理与 NSError

ios - FFmpeg API iOS "Resource temporarily unavailable"