ios - NSURLSession 不返回数据

标签 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,但没有它 - 也没有响应。

最佳答案

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

事实证明,我必须调用完成处理程序,以便将来的回调工作,即: completionHandler(NSURLSessionResponseAllow);

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

希望有一天这会对某人有用。

关于ios - NSURLSession 不返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51061130/

相关文章:

ios - 使用 Core 图像过滤时内存泄漏

ios - 从 Storyboard 加载 Collection View Cell(而不是从带有 registerNib 的 nib)

ios6 自动布局约束

iphone - 有负零吗?

ios - 如何在 Swift 4 中通过具有多个参数的多部分表单数据上传图像或文件

ios - iOS 上的 PhoneGap 应用程序感觉原生的 UI

ios - 如何在 nextViewController 字符串中存储 textField 值

iphone - 在 drawRect 中绘制对象与添加 subview 和移动它们的框架

ios - 带有 performSelector : 的 NSURLSession

ios - 数据不是通过 3G 从后台发送的