当前位置:  开发笔记 > 前端 > 正文

不调用NSURLSessionDataTask委托方法

如何解决《不调用NSURLSessionDataTask委托方法》经验,为你挑选了1个好方法。

我试图从API下载一些JSON.现在什么都没打印出来.

我肯定知道路径和API Key/Value是有效的,因为我使用NSURLSessionDataTask和完成处理程序来完成它,但我想学习如何使用委托方法做同样的事情.

但我似乎无法弄清楚为什么我的委托方法没有被调用.

@interface MetaData () 

@end

@implementation MetaData
-(void)downloadData
{
    NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];

    [sessionConfig setHTTPAdditionalHeaders:@{ header : key}];
    NSURLSession *defaultSesh = [NSURLSession sessionWithConfiguration:sessionConfig];
    NSURLSessionDataTask *dataTask = [defaultSesh dataTaskWithURL:[NSURL URLWithString:path]];
    defaultSesh = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
    [dataTask resume];


}

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler
{
    NSLog(@"here 2");
}

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
    NSLog(@"here");
    _weaponDictionary = [NSJSONSerialization JSONObjectWithData:data
                                                        options:kNilOptions
                                                          error:nil];
    NSLog(@"dictionary: %@", _weaponDictionary);
}

谢谢您的帮助.

编辑

defaultSesh = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];

通过添加该行,我将委托设置为self.所以现在我打印"这里2"但仍然不打印字典...



1> vadian..:

使用该方法

+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration
                                  delegate:(id)delegate
                             delegateQueue:(NSOperationQueue *)queue

正确设置委托.

更新:

你必须调用完成处理程序 didReceiveResponse

completionHandler

代码调用的完成处理程序,用于继续传输,传递常量以指示传输是继续作为数据任务还是应该成为下载任务.
•如果通过NSURLSessionResponseAllow,任务将继续正常进行.
•如果通过NSURLSessionResponseCancel,则任务将被取消.
•如果NSURLSessionResponseBecomeDownload作为处置传递,URLSession:dataTask:didBecomeDownloadTask:则调用委托的方法为您提供取代当前任务的新下载任务.

例如

- (void) URLSession:(NSURLSession *)session 
           dataTask:(NSURLSessionDataTask *)dataTask 
 didReceiveResponse:(NSURLResponse *)response 
  completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
{
    completionHandler(NSURLSessionResponseAllow);
}

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有