我尝试使用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。
我在做什么错了?
我也尝试过:
didReceiveResponse
回调,仅此而已。[NSOperationQueue new]
用于队列[NSURLSession sharedSession]
-没有得到任何响应[NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier: @"..."]
-会说我不能使用completionHandler,但是没有它,也没有响应。答案 0 :(得分:1)
所以我找到了答案,但是从文档中并不太明显:
我有几个回调,其中有didReceiveResponse
。
结果我必须调用完成处理程序,以便将来的回调起作用,即:
completionHandler(NSURLSessionResponseAllow);
还有另一件事:didCompleteWithError
实际上也是告诉成功完成的委托,尽管名称暗示这是错误处理程序。
含义:成功完成下载后,错误= nil
调用此函数。
希望有一天对某人有用。