NSURLSession不返回数据

时间:2018-06-27 11:02:48

标签: ios objective-c nsurlsession nsurlsessiondatatask

我尝试使用NSURLSessionDataTask下载zip归档文件。 我知道这里有一个NSURLSessionDownloadTask,但关键是我想要一个didReceiveData回调(以显示进度)。

代码是:

NSURLRequest *request = [NSURLRequest requestWithURL:@"..."
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];

NSURLSessionConfiguration* config = [NSURLSessionConfiguration defaultSessionConfiguration];
NSOperationQueue *myQueue = [NSOperationQueue new];
myQueue.underlyingQueue = dispatch_get_main_queue();

NSURLSession *session = [NSURLSession sessionWithConfiguration:config
delegate:self 
delegateQueue:myQueue];

NSURLSessionDataTask* task = [session dataTaskWithRequest:request
completionHandler:^( NSData *data, NSURLResponse *response, NSError *error){ ... }

[task resume];

我的班级符合NSURLSessionDataDelegate

当我调用该方法时,调试器在几秒钟后进入nil数据且出现nil错误的completionHandler。 我在做什么错了?

我也尝试过:

  • 在不使用completionHandler的情况下进行调用,然后调试器转到具有200个响应的didReceiveResponse回调,仅此而已。
  • [NSOperationQueue new]用于队列
  • 使用[NSURLSession sharedSession]-没有得到任何响应
  • 使用[NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier: @"..."]-会说我不能使用completionHandler,但是没有它,也没有响应。

1 个答案:

答案 0 :(得分:1)

所以我找到了答案,但是从文档中并不太明显: 我有几个回调,其中有didReceiveResponse

结果我必须调用完成处理程序,以便将来的回调起作用,即: completionHandler(NSURLSessionResponseAllow);

还有另一件事:didCompleteWithError实际上也是告诉成功完成的委托,尽管名称暗示这是错误处理程序。 含义:成功完成下载后,错误= nil调用此函数。

希望有一天对某人有用。