• 异步get请求之代理方法


     1 #import "ViewController.h"
     2 #import "Header.h"
     3 
     4 @interface ViewController ()<NSURLSessionDataDelegate>
     5 
     6 /**
     7  *  用于保存相关的数据
     8  */
     9 @property (nonatomic, strong) NSMutableData *resultData;
    10 
    11 @end
    12 
    13 @implementation ViewController
    14 
    15 - (void)viewDidLoad {
    16     [super viewDidLoad];
    17     // Do any additional setup after loading the view, typically from a nib.
    18 }
    19 
    20 // 对数据进行加载:使用NSURLSessionDataTask和NSURLSessionTask两者没有本质区别
    21 // 要处理下载任务的使用使用此任务NSURLSessionDownloadTask
    22 // 要处理上传任务使用:NSURLSessionUploadTask
    23 
    24 #pragma mark - get请求(异步)
    25 - (IBAction)getRequest:(UIButton *)sender {
    26 
    27     // 1.创建url
    28     NSURL *url = [NSURL URLWithString:GET_URL];
    29 
    30 
    31     // 2.创建session对象
    32     // 参数一:模式的设置
    33     /*
    34      defaultSessionConfiguration 默认会话模式
    35      ephemeralSessionConfiguration 瞬时会话模式
    36      backgroundSessionConfigurationWithIdentifier 后台会话模式
    37      */
    38     // 参数二:代理
    39     // 参数三:线程队列
    40     NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    41     
    42     
    43     // 3.创建task对象
    44     NSURLSessionDataTask *task = [session dataTaskWithURL:url];
    45     
    46     
    47     // 4.启动任务
    48     [task resume];
    49     
    50 }
    51 
    52 
    53 #pragma mark - 实现协议方法
    54 // 服务器开始响应
    55 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
    56     
    57     // 允许服务器响应【在这个地方只有允许服务器响应了才会接收到数据】
    58     completionHandler(NSURLSessionResponseAllow);
    59     
    60     // 初始化data,稍后进行片段的拼接存储
    61     self.resultData = [NSMutableData data];
    62 }
    63 
    64 // 接收数据拼接
    65 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
    66     
    67     // 反复执行,然后拼接相关的片段
    68     [self.resultData appendData:data];
    69 }
    70 
    71 // 数据接收完成,网络请求结束
    72 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
    73     
    74     // 解析
    75     if (error == nil) {
    76         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
    77         NSLog(@"%@", dic);
    78     }
    79 }
    80 
    81 @end
  • 相关阅读:
    asp.net gridview中增加单击单元格事件
    asp.net在应用母版的页面下采用了ModalPopupExtender弹出窗中应用autocomplete
    网站发布后无法访问,提示“/”应用程序中的服务器错误
    asp.net将数据导出到excel
    看完让你彻底搞懂Websocket原理
    PL/SQL简单使用——导入、导出数据表
    Java 定时任务的几种实现方式
    用element-ui 时,报value.getTime is not a function错误:
    Object.assign()解释整理
    IntelliJ IDEA2017 激活方法 最新的(亲测可用)
  • 原文地址:https://www.cnblogs.com/zhizunbao/p/5482863.html
Copyright © 2020-2023  润新知