【问题标题】:URLSession didCompleteWithError nil errorURLSession didCompleteWithError 无错误
【发布时间】:2016-04-08 17:09:46
【问题描述】:

在一个 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];

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

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

   NSLog(@"%s",__func__);
   [self.session_data appendData:data];
}

在调用 'didCompleteWithError' 之后。 'completionHandler' 处理程序永远不会被调用。

“didCompleteWithError”消息令人困惑的是实际的错误对象是 nil。我见过一些类似的未回答的问题。加载时我不会离开控制器/视图。我是否需要将该功能移至 AppDelegate 中?

【问题讨论】:

  • 你是否在 .plist 中设置了 NSTransport 安全性?

标签: ios objective-c networking ios9


【解决方案1】:

苹果文档说didCompleteWithError只报告客户端错误,否则为nil:

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

这是文档中的link

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

- URLSession:didBecomeInvalidWithError:

更多详情见this解答

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 2017-06-22
    • 2019-12-11
    • 1970-01-01
    • 2021-03-08
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多