iOS开发那些事-iOS网络编程同步GET方法请求编程

简介: <p>iOS SDK为HTTP请求提供了同步和异步请求两种不同的API,而且可以使用GET或POST等请求方法。我们先了解其中最为简单的同步GET方法请求。</p><p>为了学习这些API的使用MyNotes“备忘录”应用实例,数据来源于服务器端,而不是本地的Notes.xml(或Notes.json)文件。</p><p>首先实现查询业务,查询业务请求可以在主视图控制器MasterView

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

为了学习这些API的使用MyNotes“备忘录”应用实例,数据来源于服务器端,而不是本地的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开发那些事-iOS网络编程异步GET方法请求编程


目录
相关文章
|
5月前
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
2月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
34 2
|
5月前
|
安全 网络安全 Android开发
安卓与iOS开发:选择的艺术网络安全与信息安全:漏洞、加密与意识的交织
【8月更文挑战第20天】在数字时代,安卓和iOS两大平台如同两座巍峨的山峰,分别占据着移动互联网的半壁江山。它们各自拥有独特的魅力和优势,吸引着无数开发者投身其中。本文将探讨这两个平台的特点、优势以及它们在移动应用开发中的地位,帮助读者更好地理解这两个平台的差异,并为那些正在面临选择的开发者提供一些启示。
132 56
|
4月前
|
机器学习/深度学习 安全 网络安全
云端盾牌:云计算时代的网络安全守护在这个数字脉搏加速跳动的时代,云计算以其高效、灵活的特性,成为推动企业数字化转型的强劲引擎。然而,正如每枚硬币都有两面,云计算的广泛应用也同步放大了网络安全的风险敞口。本文旨在探讨云计算服务中网络安全的关键作用,以及如何构建一道坚不可摧的信息防线,确保数据的安全与隐私。
云计算作为信息技术领域的革新力量,正深刻改变着企业的运营模式和人们的生活。但在享受其带来的便利与效率的同时,云服务的安全问题不容忽视。从数据泄露到服务中断,每一个安全事件都可能给企业和个人带来难以估量的损失。因此,本文聚焦于云计算环境下的网络安全挑战,分析其根源,并提出有效的防护策略,旨在为云服务的安全使用提供指导和参考。
90 8
|
5月前
|
缓存
PUN☀️八、拓展网络同步:RPCs 和 Properties
PUN☀️八、拓展网络同步:RPCs 和 Properties
|
5月前
|
iOS开发
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
250 0
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
|
5月前
|
存储 缓存 定位技术
如果遇到网络延迟问题,有哪些方法可以快速解决以保证视频源同步?
如果遇到网络延迟问题,有哪些方法可以快速解决以保证视频源同步?
|
8月前
|
Android开发 iOS开发 开发者
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
443 0
|
5月前
|
UED 存储 数据管理
深度解析 Uno Platform 离线状态处理技巧:从网络检测到本地存储同步,全方位提升跨平台应用在无网环境下的用户体验与数据管理策略
【8月更文挑战第31天】处理离线状态下的用户体验是现代应用开发的关键。本文通过在线笔记应用案例,介绍如何使用 Uno Platform 优雅地应对离线状态。首先,利用 `NetworkInformation` 类检测网络状态;其次,使用 SQLite 实现离线存储;然后,在网络恢复时同步数据;最后,通过 UI 反馈提升用户体验。
117 0