在使用 AFN3.0的时候使用
setDataTaskDidReceiveResponseBlock:
时报了如下错误
Control reaches end of non-void block 。
大概意思就是这个block 应该有返回值,但是你没有 所以报错了。
具体使用如下:
AFHTTPSessionManager *httpMgr = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; NSURLSessionDataTask *task = [httpMgr HEAD:[self.url absoluteString] parameters:nil success:^(NSURLSessionDataTask * _Nonnull task) { } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { }]; //默认情况下,当接收到服务器响应之后,服务器认为客户端不需要接收数据,所以后面的代理方法不会调用 //如果需要继续接收服务器返回的数据,那么需要调用block,并传入对应的策略 /* NSURLSessionResponseCancel = 0, 取消任务 NSURLSessionResponseAllow = 1, 接收任务 NSURLSessionResponseBecomeDownload = 2, 转变成下载 NSURLSessionResponseBecomeStream NS_ENUM_AVAILABLE(10_11, 9_0) = 3, 转变成流 */ [httpMgr setDataTaskDidReceiveResponseBlock:^NSURLSessionResponseDisposition(NSURLSession * _Nonnull session, NSURLSessionDataTask * _Nonnull dataTask, NSURLResponse * _Nonnull response) { // 这里如果没有返回 NSURLSessionResponseDisposition 方式的话,就会报这个错误 // 解决方法 传入对应的策略 如: return NSURLSessionResponseBecomeDownload; }];
再或者使用AFN的 download task 的时候:
[sessonMgr downloadTaskWithRequest:[NSURLRequest requestWithURL:self.url] progress:^(NSProgress * _Nonnull downloadProgress) { } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { // 如果这里不返回存储的目录也会报这个错误。 return [NSURL URLWithString:self.destPath]; } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { }];
这个问题在 stackOverFlow上有相关解答