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. React Native学习-控制横竖屏第三方组件:react-native-orientation

    在项目中,有时候可能会想使不同的页面显示的横竖屏也不一样,比如前一段我做的<广播体操>的项目,在首页面,肯定是想使页面为竖屏显示,但是播放页面要为横屏显示,即使用户的手机可以转屏,我们的播 ...

  2. css隐藏元素display:none,opacity:0;filter:alpha(opacity=0-100;,visibility:hidden的区别

    在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间:有的可以响应点击,有的不能响应点击.我们一般有三种方式:display:none, opacity:0;fil ...

  3. Mousetrap - Keyboard shortcuts in Javascript

    Mousetrap is a simple library for handling keyboard shortcuts in Javascript. It is around 2kb minifi ...

  4. 使用c#将多个文件放入文件夹中,并压缩下载

    ZipClass.cs  这个是一个压缩文件的类,可直接复制使用,使用到的命名空间是 using System.IO;using ICSharpCode.SharpZipLib;using ICSha ...

  5. MySQL配置管理

    数据库的链接: 获取项目结果集和链接: package Dao; import java.sql.Connection; import java.sql.ResultSet; import java. ...

  6. CI框架程序--本地调试之后部署新浪SAE

    前几天给朋友写了个简单的网站, 想想还是部署到服务器上让朋友看一下效果! 用CI框架写的,有个SAE新浪云的账号,可以用!就部署到上面去了!途中遇到了一些问题!一一解决了! 在这里分享一下 供遇到这些 ...

  7. 关于iOS自定义UITabBar的几种方法

    作为iOS开发最常用的两个多视图控制器 NavigationController 和 TabBarController 已经很强大了,基本上在大部分的应用中都能看到它们的影子.但是在使用的过程中,系统 ...

  8. Struts2+Hibernate4+Spring4整合

    jar包 配置文件 web.xml文件 <!-- needed for ContextLoaderListener --> <context-param> <param- ...

  9. NOIP 2015复赛提高组Day2 T1==Codevs 4768 跳石头

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold  题目描述 Description 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中 ...

  10. windows下 berkerly db的安装配置(修正了关键步骤)

    这个是我从别人的博客上找来的,亲测可用,确实解决了我当时遇到的一些问题. 首先,从http://www.oracle.com/technology/global/cn/software/product ...