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. HDU 1233 还是畅通工程 (最小生成树)

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  2. jQuery选择器之内容过滤选择器Demo

    测试代码: 04-内容过滤选择器.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...

  3. hdu-5597 GTW likes function(欧拉函数+找规律)

    题目链接: GTW likes function Time Limit: 4000/2000 MS (Java/Others)     Memory Limit: 131072/131072 K (J ...

  4. Jquery插件(CKEditor)

    描述 在html页面实现像word一样的编辑功能(可视化HTML编辑器) 解决方法 ckeditor插件官方网站 http://ckeditor.com/ 使用 1:去官方下载ckeditor插件,添 ...

  5. asp.net渐变

    简介:第一个参数代表渐变的方向,后面的StartColorStr和End就不用解释了: filter: progid:DXImageTransform.Microsoft.Gradient(Gradi ...

  6. 【转载】Asp.net Mvc 入门视频教程

    专辑: http://www.youku.com/playlist_show/id_2416830.html 订阅: http://www.youku.com/playlist/rss/id/2416 ...

  7. Android点击其他任意位置收起软键盘

    在Android应用开发中,经常出现这样的需求,用户在输入文字的过程中,可能不想继续输入了,通过滑动或者点击其他位置(除软键盘和EditText以外的任何位置),希望能够自动收回键盘,这个功能可能有些 ...

  8. 十一、Android学习笔记_AsyncQueryHandler的应用

    研究AsyncQueryHandler这个类的时候遇到了几个重要的不清楚的知识点 1. Handler与Thread,Looper的关系 2. HandlerThread是干什么用的 3. Threa ...

  9. jQuery中的DOM操作<思维导图>

    DOM是Document Object Model的缩写,意思是文档对象模型.DOM是一种与浏览器.平台.语言无关的接口.使用该接口可以轻松地访问页面中所有的标准组件.简单来说,DOM解决了Netsc ...

  10. 百度编辑器ueditor代码高亮效果前台不显示的解决方法

    原因是你没有在你的内容页加载相应的css文件,这要如何解决呢? 经测试,只要插入以下两个文件即可解决问题: <link href="你的ueditor路径/ueditor/third- ...