iOS SDK为HTTP请求提供了同步和异步请求两种不同的API,而且可以使用GET或POST等请求方法。我们先了解其中最为简单的同步GET方法请求。
为了学习这些API的使用我们还是选择第3章MyNotes“备忘录”应用实例,与第3章不同的是数据来源于服务器端,而不是本地的Notes.xml(或Notes.json)文件。
首先实现查询业务,查询业务请求可以在主视图控制器MasterViewController类中实现,其中MasterViewController.h代码如下:
#import <UIKit/UIKit.h> #import “NSString+URLEncoding.h” #import “NSNumber+Message.h” @interface MasterViewController : UITableViewController @property (strong, nonatomic) DetailViewController *detailViewController; //保存数据列表 @property (nonatomic,strong) NSMutableArray* listData; //重新加载表视图 -(void)reloadView:(NSDictionary*)res; //开始请求Web Service -(void)startRequest; @end
其中引入头文件NSString+URLEncoding.h文件是在程序中需要对URL进行编码处理。引入头文件 NSNumber+Message.h文件是处理把服务器返回消息代码转换为用户能看懂的消息。
MasterViewController.m中的主要代 码如下: - (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.leftBarButtonItem = self.editButtonItem; self.detailViewController = (DetailViewController *) [[self.splitViewController.viewControllers lastObject] topViewController]; [self startRequest]; ① } #pragma mark – Table View - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.listData.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; NSMutableDictionary* dict = self.listData[indexPath.row]; cell.textLabel.text = [dict objectForKey:@"Content"]; cell.detailTextLabel.text = [dict objectForKey:@"CDate"]; return cell; }
其中第①行代码[self startRequest]调用自己的方法startRequest实现请求Web Service。MasterViewController.m中的startRequest方法代码如下:
/* * 开始请求Web Service */ -(void)startRequest { NSString *strURL = [[NSString alloc] initWithFormat: @”http://iosbook3/mynotes/webservice.php?email=%@&type=%@&action=%@”, @”<你的iosbook1.com用户邮箱>”,@”JSON”,@”query”]; ① NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]]; ② NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; ③ NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; ④ NSLog(@”请求完成…”); NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; [self reloadView:resDict]; ⑤ }
此外,我们在前文中还提到了一个分类NSString (URLEncoding),它的作用是对URL编码和解码,它的代码如下:
@interface NSString (URLEncoding) -(NSString *)URLEncodedString; -(NSString *)URLDecodedString; @end @implementation NSString (URLEncoding) - (NSString *)URLEncodedString { NSString *result = (NSString *) CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,① (CFStringRef)self, NULL, ② CFSTR(“+$,#[] “), ③ kCFStringEncodingUTF8)); return result; } - (NSString*)URLDecodedString { NSString *result = (NSString *) CFBridgingRelease(CFURLCreateStringByReplacingPercentEscapesUsingEncoding (kCFAllocatorDefault, ③ (CFStringRef)self, CFSTR(“”), ④ kCFStringEncodingUTF8)); return result; } @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开发------Widget(Today Extension)插件化开发1
资源名称:iOS开发视频教程资源目录:【】iOS开发视频教程-第01讲-iOS历史介绍【】iOS开发视频教程-第02讲-XCode安装【】iOS开发视频教程-第03讲-UIView_PPT【】iOS开发视频教程-第04讲-UILabel【】iOS开发视频教程-...
iOS开发进阶篇-成为iOS开发高手-源码
iOS开发进阶篇-成为一个iOS开发高手(PDF)
iOS设计模式解析-Object编程之道
UI第一章:无限互联iOS开发教程课件-- iPhone开发入门
the ios apprentice 系列第一部的中文版,方便不懂英文的童鞋
iOS开发 - 第04篇 - 网络 - 01 - NSOperation & 网络基础,对应博客地址:http://blog.csdn.net/nsryan
之前遇到的需求,ios上没有类似的实现。搞了好久在网上搜了很多资料都不能解决最后找到了一个c/c++的底层源码,才实现了最后整理了下上传了。是个ios的demo很详细你定能看懂的。运行在xcode环境下,关键算法的文件是...
iOS应用开发攻略--文字版.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
iOS开发之Objective-C语法快速参考(PDF文档).
苹果开发- iOS-邓白氏-编码申请
AFNetworking第三方网络数据请求类-是iOS开发必备的开发工具类,快捷方便的在开发过程中使用,大大提高开发效率
iOS语音开发libopencore-amrwb和libopencore-amrnb最新适用库,该版本支持x86_64、i386、armv7、armv7s、arm64cpu架构 使用方法:拖入项目 方便自己下载,想用各位老铁也下吧
iOS POST GET 同步 异步 网络请求。
iOS常用加密方法(aes、md5、base64)
适合人群:具备一定编程基础,工作1-3年的iOS开发人员。 在学习《iOS 仿抖音 Object-C》的过程中,读者将学习到以下内容: 工厂模式、策略模式、观察者模式在iOS开发中的体现方式。 IOC、AOP、代理、切面、循环...
思科 cisco ios 镜像 C3640-JK.BIN 文件由多位CCIE水平人员测试使用后拷贝,dy下可用
内部封装了一些iOS开发常用的滚动视图方法,调用一两个简单的方法,就可以写出漂亮的滚动视图,比如一些软件中常用的广告栏,同时还有过渡动画,自动轮播的功能
唐巧的《iOS开发进阶》,希望对一些初级的程序员有用