文档章节

iOS 网络编程

别情花如依丶
 别情花如依丶
发布于 2016/04/20 22:02
字数 1046
阅读 7
收藏 0

iOS 开发中所需的数据基本都是来自网络,网络数据请求是 iOS 编程中必不可少的,应该熟练掌握网络请求.

网络请求方式有 :GET , POST , PUT ,DELETE 等,其中常用的就是 GET,POST . GET 和 POST 请求存在着不同,GET 将数据参数跟在 URL 后面,POST 参数放在 body 中,不可见.

数据请求方式分为同步请求和异步请求,其中常用的是异步请求,异步请求避免了因组线程阻塞而造成的崩溃.这里主要说下异步请求.

1.GET 同步请求 用 NSURLConnection 实现:

  步骤:建立 request ----> 建立衔接请求数据 ------> 解析数据

代码:

1 #pragma mark --- get 同步 --- 
2 - (IBAction)getOne:(id)sender {  
3     self.allNewsArray = [[NSMutableArray alloc]init];  
4     //url 地址 
5     NSURL *url = [NSURL URLWithString:PATH];  
6     //请求 
7     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];  
8     //建立衔接请求数据 
9     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
10     //如果数据不为空就解析
11     if (data) { 
12         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:1 error:nil]; 13         //处理数据,用 model 存储
14         for (NSDictionary *dic1 in [dic objectForKey:@"news"]) { 
15             NewsModel *model = [[NewsModel alloc]init]; 
16  [model setValuesForKeysWithDictionary:dic1]; 
17  [self.allNewsArray addObject:model]; 
18  } 
19         
20  } 
21 }

 

2.GET 异步请求 BLOCK 形式 用 NSURLConnection 实现

 1 #pragma mark --- get 异步请求 --- 2 - (IBAction)getTwo:(id)sender {  3      4     self.allNewsArray = [[NSMutableArray alloc]init];  5     //url 地址 6     NSURL *url = [NSURL URLWithString:PATH];  7     //请求 8     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];  9    //默认是 get 方法,如果是 get 方法可以不写10     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { 11         if (data) { 12             NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 13             //处理数据,用 model 存储14             for (NSDictionary *dic1 in [dic objectForKey:@"news"]) { 15                 NewsModel *model = [[NewsModel alloc]init]; 16  [model setValuesForKeysWithDictionary:dic1]; 17  [self.allNewsArray addObject:model]; 18  } 19  } 20         21  }]; 22 }

 

3.POST 异步请求 BLOCK 形式:用 NSURLConnection 实现

 

 1 #pragma mark --- POST 异步 Block 形式 --- 2 - (IBAction)POSTBlock:(id)sender {  3      4     NSURL *URL = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];  5     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];  6      7     //制作包体 8     NSString *param = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";  9     10     NSData *data = [param dataUsingEncoding:NSUTF8StringEncoding]; 11     12     //设置请求方式13     [request setHTTPMethod:@"POST"]; 14     //设置 body15  [request setHTTPBody:data]; 16     [request setTimeoutInterval:60]; 17     18     19     //建立连接.请求数据20     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { 21         22         //解析数据23         if (data) { 24             NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 25             //处理数据,用 model 存储26             for (NSDictionary *dic1 in [dic objectForKey:@"news"]) { 27                 NewsModel *model = [[NewsModel alloc]init]; 28  [model setValuesForKeysWithDictionary:dic1]; 29  [self.allNewsArray addObject:model]; 30  } 31  } 32         33  }]; 34    }

 

 

 

 

4.POST 异步请求 delegate 形式:用 NSURLConnection 实现

 

 1 - (IBAction)POST_Delegate:(id)sender {  2      3     NSURL *URL = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];  4      5     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];  6      7     //制作包体 8     NSString *param = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";  9     10     NSData *data = [param dataUsingEncoding:NSUTF8StringEncoding]; 11     12     //设置请求方式13     [request setHTTPMethod:@"POST"]; 14     //设置请求 body15  [request setHTTPBody:data]; 16     17     //建立连接请求数据18     NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self]; 19     20     //启动请求21  [conn start]; 22  } 23 24 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ 25     NSLog(@"接收到响应"); 26     27     self.data = [NSMutableData data]; 28     29 } 30 31 #pragma mark --- 接收数据的方法 ---32 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 33  [self.data appendData:data]; 34 } 35 36 #pragma mark --- 结束传递数据 ---37 - (void)connectionDidFinishLoading:(NSURLConnection *)connection{ 38     39     NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.data options:1 error:nil]; 40     NSLog(@"%@",dic); 41     42 } 43 44 45 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ 46     47 }

 

 

 

 

5.GET 异步请求 SESSION 写法

 

 1 #pragma mark --- GET Session 写法 --- 2 - (IBAction)session:(id)sender {  3      4     //创建 session 对象 5     NSURLSession *session = [NSURLSession sharedSession];  6      7     NSURL *URL = [NSURL URLWithString:PATH];  8      9     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; 10     11     NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 12         13         if(data){ 14             NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 15             16             NSLog(@"%@",dic); 17  } 18  }]; 19     20     //开始请求 (一定要调用)21  [task resume]; 22 }

 

 

6.POST 异步请求 BLOCK 形式:用 NSURLSession 实现

 

 1 - (IBAction)POST_Session:(id)sender {  2      3     NSURL *URL = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];  4      5     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];  6      7     //制作包体 8     NSString *param = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";  9     10     NSData *data = [param dataUsingEncoding:NSUTF8StringEncoding]; 11     12     //设置请求方式13     [request setHTTPMethod:@"POST"]; 14     //设置请求 body15  [request setHTTPBody:data]; 16     17     NSURLSession *session = [NSURLSession sharedSession]; 18     NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 19         NSLog(@"%@",error); 20         21         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:1 error:nil]; 22         NSLog(@"%@",dic); 23  }]; 24     25  [task resume]; 26 }

 

 

© 著作权归作者所有

共有 人打赏支持
别情花如依丶

别情花如依丶

粉丝 5
博文 78
码字总数 20405
作品 6
程序员
私信 提问
IOS学习,最简单的表格应用程序,学习,列出博客

IOS编程浅蓝教程,这是博客地址http://www.cnblogs.com/haichao/category/425378.html IOS编程浅蓝教程:锲子 IOS编程浅蓝教程(一)先决条件:开始iOS编程的必要准备 IOS编程浅蓝教程(二) Hel...

andy521zhu
2015/01/17
0
0
苹果向开发者发布 iOS 8.3 第二个测试版

苹果今天向开发者发布了 iOS 8.3 第二个测试版,距离 iOS 8.3 第一个测试版相隔两周。iOS 8.3 测试版的发布让人很吃惊,因为支持 WatchKit SDK 的 iOS 8.2 仍然在测试之中。开发者可以通过 ...

oschina
2015/02/24
484
2
如果只有一个月的时间学 iOS 开发,我们该做些什么?

一年前,我还是一个 Android 开发者。那时候我没有任何 iOS 编程相关的知识,我甚至没用过任何苹果的产品。然而,这已成为过去,现在我已经能同时开发 iOS 和 Android 应用了。 现在,我想给...

oschina
2017/03/09
3.3K
13
OSChina 技术专题之 Swift 苹果全新开发语言

Swift 是苹果新推出的编程语言,专门针对 OS X 和 iOS 的应用开发。Swift 在各个方面优于 Objective-C,也不会有那么多复杂的符号和表达式。同时,Swift 更加快速、便利、高效、安全。除此之...

OSC编辑部
2014/11/10
4.2K
4
如何判断你是合格的高级iOS开发工程师?

前言 随着移动互联网的高速发展泄洪而来,有意学习移动开发的人越来越多了,竞争也是越来越大,需要学习的东西很多。如何才能在激烈的移动开发者竞争中一枝独秀,成为一名真正合格的高级iOS...

_小迷糊
2018/05/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

glide 下载golang.org包问题

今天编译Uber的Aresgo。依赖管理用 glide,下载golang.org 包的时候遇到问题。 方法一: 设置 glide mirror glide mirror set https://golang.org/x/mobile https://github.com/golang/mobi...

shengjuntu
8分钟前
0
0
4.线程

线程是操作系统中最小的执行单元。 它本身不是一个程序,而是在程序中运行。 换句话说,线程并不相互独立,并与其他线程共享代码段,数据段等。 这些线程也被称为轻量级进程。 线程状态 新线...

Eappo_Geng
15分钟前
0
0
在Linux上编译LLVM/Clang 8.0.0等全部源代码

本教程使用的操作系统是Ubuntu Linux 18.04.2 LTS版本,要编译的LLVM源代码是8.0.0。 1、安装必要的软件。它们是:build-essential/cmake/swig/python-swigpk/libxml2/libxml2-dev/libncurs...

ryanliue
23分钟前
2
0
毕业季,我的Linux求职之路

秋招终于告一段落了,本硕的七年求学之路也快画上了句号。回首求职的这一段日子,痛苦并快乐着。感谢所有陪伴着我走过这一段路程的同学,所有的辛酸都值得铭记。求职的过程中在网上看了很多的...

linux-tao
53分钟前
3
0
Mybatis动态语句,if test字符串不用进行null判断

描述:根据creator列进行过滤获取image表的数据。 代码如下: @Select("<script>" + " select * from image " + " <where>" + " <if test='isAllCreator != 1'> ......

Coder顾
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部