码迷,mamicode.com
首页 > 其他好文 > 详细

异步post请求之代理方法

时间:2016-05-11 19:40:47      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

  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

 

异步post请求之代理方法

标签:

原文地址:http://www.cnblogs.com/zhizunbao/p/5483260.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!