iOS SDK为HTTP请求提供了同步和异步请求两种不同的API,而且可以使用GET或POST等请求方法。我们先了解其中最为简单的同步GET方法请求。

首先实现查询业务,查询业务请求可以在主视图控制器MasterViewController类中实现,其中MasterViewController.h代码如下:

  1. #import <UIKit/UIKit.h>
  2. #import “NSString+URLEncoding.h”
  3. #import “NSNumber+Message.h”
  4. @interface MasterViewController : UITableViewController
  5. @property (strong, nonatomic) DetailViewController *detailViewController;
  6. //保存数据列表
  7. @property (nonatomic,strong) NSMutableArray* listData;
  8. //重新加载表视图
  9. -(void)reloadView:(NSDictionary*)res;
  10. //开始请求Web Service
  11. -(void)startRequest;
  12. @end

其中引入头文件NSString+URLEncoding.h文件是在程序中需要对URL进行编码处理。引入头文件 NSNumber+Message.h文件是处理把服务器返回消息代码转换为用户能看懂的消息。

  1. MasterViewController.m中的主要代 码如下:
  2. - (void)viewDidLoad
  3. {
  4. [super viewDidLoad];
  5. self.navigationItem.leftBarButtonItem = self.editButtonItem;
  6. self.detailViewController  = (DetailViewController *)
  7. [[self.splitViewController.viewControllers lastObject] topViewController];
  8. [self startRequest];                                                ①
  9. }
  10. #pragma mark – Table View
  11. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  12. return 1;
  13. }
  14. - (NSInteger)tableView:(UITableView *)tableView
  15. numberOfRowsInSection:(NSInteger)section {
  16. return self.listData.count;
  17. }
  18. - (UITableViewCell *)tableView:(UITableView *)tableView
  19. cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  20. UITableViewCell *cell
  21. = [tableView dequeueReusableCellWithIdentifier:@"Cell"
  22. forIndexPath:indexPath];
  23. NSMutableDictionary*  dict = self.listData[indexPath.row];
  24. cell.textLabel.text = [dict objectForKey:@"Content"];
  25. cell.detailTextLabel.text = [dict objectForKey:@"CDate"];
  26. return cell;
  27. }

其中第①行代码[self startRequest]调用自己的方法startRequest实现请求Web Service。MasterViewController.m中的startRequest方法代码如下:

  1. /*
  2. * 开始请求Web Service
  3. */
  4. -(void)startRequest
  5. {
  6. NSString *strURL = [[NSString alloc] initWithFormat:
  7. @”http://iosbook3/mynotes/webservice.php?email=%@&type=%@&action=%@”,
  8. @”<你的iosbook1.com用户邮箱>”,@”JSON”,@”query”];                           ①
  9. NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]];             ②
  10. NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];               ③
  11. NSData *data  = [NSURLConnection sendSynchronousRequest:request
  12. returningResponse:nil error:nil];                       ④
  13. NSLog(@”请求完成…”);
  14. NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data
  15. options:NSJSONReadingAllowFragments error:nil];
  16. [self reloadView:resDict];                                              ⑤
  17. }

此外,我们在前文中还提到了一个分类NSString (URLEncoding),它的作用是对URL编码和解码,它的代码如下:

  1. @interface NSString (URLEncoding)
  2. -(NSString *)URLEncodedString;
  3. -(NSString *)URLDecodedString;
  4. @end
  5. @implementation NSString (URLEncoding)
  6. - (NSString *)URLEncodedString
  7. {
  8. NSString *result = (NSString *)
  9. CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,①
  10. (CFStringRef)self,
  11. NULL,                           ②
  12. CFSTR(“+$,#[] “),                      ③
  13. kCFStringEncodingUTF8));
  14. return result;
  15. }
  16. - (NSString*)URLDecodedString
  17. {
  18. NSString *result = (NSString *)
  19. CFBridgingRelease(CFURLCreateStringByReplacingPercentEscapesUsingEncoding
  20. (kCFAllocatorDefault,                                                 ③
  21. (CFStringRef)self, CFSTR(“”),                                       ④
  22. kCFStringEncodingUTF8));
  23. return result;
  24. }
  25. @end

第①行代码CFURLCreateStringByAddingPercentEscape函数是Core Foundation框架提供的C函数,可以把内容转换成为URL编码。第②行参数指定了将本身为非法URL字符不进行编码的字符集合,例如:“!* ()”等符号。第③行参数是将本身为合法URL字符需要进行编码的字符集合。

第③行代码CFURLCreateStringByReplacingPercentEscapesUsingEncoding函数是Core Foundation框架提供的C函数,它与上面CFURLCreateStringByAddingPercentEscape函数截然相反,是进行 URL解码的。第④行的参数指定不进行解码的字符集。

Foundation框架也提供了基于Objective-C的方法进行URL编码和解码,与 CFURLCreateStringByAddingPercentEscape函数对应的NSString方法是 stringByAddingPercentEscapesUsingEncoding。与 CFURLCreateStringByReplacingPercentEscapesUsingEncoding函数对应的NSString方法是 stringByReplacingPercentEscapesUsingEncoding:,由于这些方法不能自定义是否要编码和解码的字符集,因此 没有上面的函数灵活。

iOS网络编程同步GET方法请求编程的更多相关文章

  1. ios网络学习------1get post异步请求

    网络请求的步骤: get请求: #pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,由于一般来说属性都是和界面关联的,我们能够通过參数的方式来使用属性 #pragma mark ...

  2. 网络处理1-异步GET请求

    前言 云计算 近几年来,云计算是一个非常热门的技术名词,很多专家认为,云计算会改变互联网的技术基础,甚至会影响整个产业的格局.可能还很多人不了解什么是云计算,简单来说,就是把用户的数据(比如文档.照片 ...

  3. iOS网络编程-ASIHTTPRequest框架同步请求-备用

    在ASIHTTPRequest框架中与HTTP请求相关的类有:ASIHTTPRequest和ASIFormDataRequest,其中最常用的是ASIHTTPRequest,ASIFormDataRe ...

  4. 【读书笔记】iOS网络-同步请求,队列式异步请求,异步请求的区别

    一,同步请求的最佳实践. 1,只在后台过程中使用同步请求,除非确定访问的是本地文件资源,否则请不要在主线程上使用. 2,只有在知道返回的数据不会超出应用的内存时才使用同步请求.记住,整个响应体都会位于 ...

  5. IOS网络编程:HTTP

    IOS网络编程:HTTP HTTP定义了一种在服务器和客户端之间传递数据的途径. URL定义了一种唯一标示资源在网络中位置的途径. REQUESTS 和 RESPONSES: 客户端先建立一个TCP连 ...

  6. iOS网络高级编程:iPhone和iPad的企业应用开发之错误处理

    本章内容 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcWluZ2h1YXdlbmthbmc=/font/5a6L5L2T/fontsize/400/fi ...

  7. iOS网络编程模型

    iOS网络编程层次结构也分为三层: Cocoa层:NSURL,Bonjour,Game Kit,WebKit Core Foundation层:基于 C 的 CFNetwork 和 CFNetServ ...

  8. iOS网络编程笔记——Socket编程

    一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是T ...

  9. iOS 网络编程模式总结

    IOS 可以采用三类api 接口进行网络编程,根据抽象层次从低到高分别为socket方式.stream方式.url 方式. 一 .socket 方式 IOS 提供的socket 方式的网络编程接口为C ...

随机推荐

  1. PHP将解析xml变为数组方法

    最近想要做一个插件机制,需要用到xml,在解析xml时候需要转换为数组,特意记录一个此种解析方式 xml文件 <?xml version="1.0" encoding=&qu ...

  2. HDU 1069 Monkey and Banana (DP)

    Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  3. poj 1947 树形dp

    思路:dp[i][j]表示,以i节点为根,删去j个节点最少要断几条边. 那么dp[u][j]=min(dp[u][j],dp[v][k]+dp[u][j-k]);//选取最优状态 dp[u][j]=m ...

  4. 添加iPhone设备的udid之后,重新生成开发证书(Development)

    选择Provisioning profiles-Development-添加 ,如图:

  5. hdu3068

    最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. shell--学习 sed

    sed:数据流编辑器 读一行到内存处理一行然后输出一行. 模式空间: sed:默认不编辑源文件 sed [option]    ADDRESSCOMMAND   file 1.起始行. 结束行 sed ...

  7. 浅谈我眼中的ASP.NET MVC

    坦白地说,学习MVC是前一段时间的事情了.但是,我当时虽然也实践过,却也不能很好的说出个所以然来.因此,也 一直没敢写点什么文字总结.最近,开始学习EF,也同时在使用MVC来结合EF实践增删改查.慢慢 ...

  8. 北大ACM(POJ1013-Counterfeit Dollar)

    Question:http://poj.org/problem?id=1013 问题点:排除+验证. Memory: 244K Time: 16MS Language: C++ Result: Acc ...

  9. php中json_decode返回数组或对象的实例

    1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode — 对 JSON 格式的字符串进行 ...

  10. [Android开发系列]IT博客应用

    1.关于坑 好吧,在此之前先来说一下,之前开的坑,恩,确实是坑,前面开的两个android开发教程的坑,对不起,实在是没什么动力了,不过源码都有的,大家可以参照github这个应用 https://g ...