• 异步post请求之代理方法


      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 - post请求(异步)
     25 - (IBAction)postRequest:(UIButton *)sender {
     26 
     27     // 1.创建url
     28     NSURL *url = [NSURL URLWithString:GET_URL];
     29     
     30     // 2.创建请求
     31     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
     32 
     33 
     34     // 2.5.设置body
     35     // 创建一个连接字符串(这个内容在以后的开发中接口文档都有标注)
     36     NSString *dataStr = POST_BODY;
     37 
     38     // 对连接字符串进行编码【这一步千万不能忘记】
     39     NSData *postData = [dataStr dataUsingEncoding:NSUTF8StringEncoding];
     40 
     41     // 设置请求格式为post请求【在这里POST必须大写】
     42     [request setHTTPMethod:@"POST"];
     43 
     44     // 设置请求体(body)
     45     [request setHTTPBody:postData];
     46 
     47     // 3.创建session对象并设置代理
     48     // 参数一:模式的设置
     49     /*
     50      defaultSessionConfiguration 默认会话模式
     51      ephemeralSessionConfiguration 瞬时会话模式
     52      backgroundSessionConfigurationWithIdentifier 后台会话模式
     53      */
     54     // 参数二:代理
     55     // 参数三:线程队列
     56     NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
     57     
     58     
     59     // 4.创建task对象
     60     NSURLSessionDataTask *task = [session dataTaskWithURL:url];
     61     
     62     
     63     // 5.启动任务
     64     [task resume];
     65     
     66     // 对数据进行加载:使用NSURLSessionDataTask和NSURLSessionTask两者没有本质区别
     67     // 要处理下载任务的使用使用此任务NSURLSessionDownloadTask
     68     // 要处理上传任务使用:NSURLSessionUploadTask
     69 
     70 }
     71 
     72 #pragma mark - 实现协议方法
     73 // 服务器开始响应
     74 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
     75     
     76     // 允许服务器响应【在这个地方只有允许服务器响应了才会接收到数据】
     77     completionHandler(NSURLSessionResponseAllow);
     78     
     79     // 初始化data,稍后进行片段的拼接存储
     80     self.resultData = [NSMutableData data];
     81 }
     82 
     83 // 接收数据拼接
     84 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
     85     
     86     // 反复执行,然后拼接相关的片段
     87     [self.resultData appendData:data];
     88 }
     89 
     90 // 数据接收完成,网络请求结束
     91 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
     92     
     93     // 解析
     94     if (error == nil) {
     95         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
     96         NSLog(@"%@", dic);
     97     }
     98 }
     99 
    100 @end
  • 相关阅读:
    <LinkedList> 61
    <LinkedList> (hard + 高)25
    <DP> (高频)322
    <BackTracking> (dfs hard) 291
    <Tree> (高频)236
    <Math> 29 365
    <String> 161 358
    <Array> 309 (高)334
    <Array> 54 (高频+hard )45
    <Design> 359 346
  • 原文地址:https://www.cnblogs.com/zhizunbao/p/5483260.html
Copyright © 2020-2023  润新知