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方法请求编程


目录
相关文章
|
1月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
84 3
|
1月前
|
移动开发 前端开发 数据安全/隐私保护
iOS发布证书.p12文件无密码解决办法及导出带密码的新.p12文件方法
iOS发布证书.p12文件无密码解决办法及导出带密码的新.p12文件方法
28 0
|
1月前
|
Android开发 iOS开发 开发者
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
89 0
|
5天前
|
API 定位技术 iOS开发
IOS开发基础知识:什么是 Cocoa Touch?它在 iOS 开发中的作用是什么?
【4月更文挑战第18天】**Cocoa Touch** 是iOS和Mac OS X应用的核心框架,包含面向对象库、运行时系统和触摸优化工具。它提供Mac验证的开发模式,强调触控接口和性能,涵盖3D图形、音频、网络及设备访问API,如相机和GPS。是构建高效iOS应用的基础,对开发者至关重要。
9 0
|
20天前
|
开发工具 Swift iOS开发
利用SwiftUI构建动态用户界面:iOS开发新范式
【4月更文挑战第3天】 随着苹果不断推进其软件开发工具的边界,SwiftUI作为一种新兴的编程框架,已经逐渐成为iOS开发者的新宠。不同于传统的UIKit,SwiftUI通过声明式语法和强大的功能组合,为创建动态且响应式的用户界面提供了一种更加简洁高效的方式。本文将深入探讨如何利用SwiftUI技术构建具有高度自定义能力和响应性的用户界面,并展示其在现代iOS应用开发中的优势和潜力。
|
1月前
|
安全 编译器 开发工具
​iOS安全加固方法及实现
​iOS安全加固方法及实现
21 0
|
1月前
|
网络协议 网络安全 API
Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应
Qt 网络编程之美:探索 URL、HTTP、服务发现与请求响应
45 1
|
1月前
|
消息中间件 存储 缓存
Kafka【基础知识 02】集群+副本机制+数据请求+物理存储+数据存储设计(图片来源于网络)
【2月更文挑战第20天】Kafka【基础知识 02】集群+副本机制+数据请求+物理存储+数据存储设计(图片来源于网络)
29 1
|
1月前
|
小程序 前端开发 程序员
【微信小程序】-- 网络数据请求(十九)
【微信小程序】-- 网络数据请求(十九)
|
2月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
192 2