我尝试使用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。
我究竟做错了什么?

我也尝试过:


调用而无需完成处理程序,然后调试器转到具有200个响应的didReceiveResponse回调,仅此而已。
对队列使用[NSOperationQueue new]
使用[NSURLSession sharedSession]-没有得到任何回应
使用[NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier: @"..."]-说我不能使用completionHandler,但是没有它-也没有响应。

最佳答案

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

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

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

希望有一天对某人有用。

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

10-11 12:49