iOS 04-NSSession类库之DataTask代理

来源:互联网 发布:吴裕彬 水平 知乎 编辑:程序博客网 时间:2024/06/15 01:32

@interface ViewController ()<NSURLSessionDataDelegate>

//创建数据容器,接收返回数据

@property (nonatomic,strong) NSMutableData *data;

@end


-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

{

    [selfdataTask];

}


-(void)dataTask {

    // 1创建请求地址 读者自行更换URL

    NSURL *url = [NSURLURLWithString:@"https://api.seniverse.com/v3/weather/now.json?key=????&location=zunyi&language=zh-Hans&unit=c"];

    // 2创建请求类

    NSURLRequest *request = [NSURLRequestrequestWithURL:url];

    // 3创建会话

    /*

     默认

     NSURLSessionConfiguration *defaultSessionConfiguration;

     无痕浏览,不存储任何信息

     NSURLSessionConfiguration *ephemeralSessionConfiguration;

     后台下载

     + (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier

     

     delegateQueue:表示协议方法在哪个线程中执行

     */

    NSURLSession *session = [NSURLSessionsessionWithConfiguration:[NSURLSessionConfigurationdefaultSessionConfiguration] delegate:selfdelegateQueue:[NSOperationQueuemainQueue]];

    // 4根据会话创建任务

   NSURLSessionDataTask *dataTask = [sessiondataTaskWithRequest:request];

    //5启动任务

    [dataTask resume];

}


#pragma mark --协议方法


//接收到服务器响应

-(void)URLSession:(NSURLSession *)session dataTask:(nonnullNSURLSessionDataTask *)dataTask didReceiveResponse:(nonnullNSURLResponse *)response completionHandler:(nonnullvoid (^)(NSURLSessionResponseDisposition))completionHandler

{

    NSLog(@"didReceiveResponse");

    

    if (self.data ==nil) {

        self.data = [[NSMutableDataalloc] init];

    }else {

        self.data.length =0;

    }

    /*

     NSURLSessionResponseCancel = 0 默认 请求之后不接收服务器的数据

    NSURLSessionResponseAllow = 1 允许接收服务器的数据

    NSURLSessionResponseBecomeDownload = 2转成下载任务

    NSURLSessionResponseBecomeStream = 3转成流

     */

    completionHandler (NSURLSessionResponseAllow);

}

//接收到数据,该方法会被调用多次

-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data

{

    NSLog(@"didReceiveData");

    [self.dataappendData:data];

}

//数据请求完成或者请求出现错误调用的方法

-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error

{

    NSLog(@"didCompletWithError");

    if (error ==nil) {

        //解析数据

      id objc = [NSJSONSerializationJSONObjectWithData:self.dataoptions:NSJSONReadingMutableContainerserror:nil];

        NSLog(@"--%@--",objc);

    }

}