URLSession didCompleteWithError nil错误

时间:2016-04-08 17:09:47

标签: ios objective-c networking 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];

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

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

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

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

令人困惑的是'didCompleteWithError'消息是实际的错误对象是nil。我看过一些类似的未解答的问题。我没有在加载时离开控制器/视图。我是否需要将该功能移至AppDelegate?

1 个答案:

答案 0 :(得分:4)

Apple doc说 didCompleteWithError 报告客户端错误,否则为nil:

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

这是文档的link

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

- URLSession:didBecomeInvalidWithError:

有关详情,请参阅this回答