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