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:,由于这些方法不能自定义是否要编码和解码的字符集,因此 没有上面的函数灵活。
相关推荐
URLSession提供了一套接口,用于发起同步和异步的网络请求,如GET、POST等。对于下载任务,我们可以使用URLSessionDownloadTask,它支持后台下载,并且可以在下载完成后通知应用程序。 在iOS的UI部分,特别是涉及到...
示例代码中,同步GET请求的创建过程包括: - 创建URL对象。 - 使用URL创建`NSURLRequest`,并设置缓存策略和超时时间。 - 调用`sendSynchronousRequest`发送请求,并处理返回的数据。 4. **POST请求**: POST...
以下是使用同步GET请求的基本步骤: ```swift import Foundation let url = URL(string: "http://example.com/data")! var urlRequest = URLRequest(url: url) urlRequest.httpMethod = "GET" let session = ...
ASIHTTPRequest 是一个经典的 iOS 网络请求库,由 Ben Copsey 创建,它在 iOS 开发的早期阶段非常流行。虽然现在已经被更现代的库,如 Alamofire 和 URLSession 取代,但对于有一定经验的 iOS 开发者来说,理解 ...
4. **请求方法**:GET、POST、PUT、DELETE等,说明接口执行的操作类型。 5. **请求参数**:列出行参和查询参数,包括参数名、类型、必填性、默认值和描述。 6. **请求体**:如果是POST或PUT请求,说明请求体的格式...
在iOS开发中,网络请求是应用与服务器交互的基础,它使得数据可以实时更新,提供丰富的用户体验。本资源“ios-网络请求工作.zip”主要关注如何使用AFNetworking 3.0和YYCache来实现高效的网络请求和数据缓存。以下是...
在iOS开发中,网络请求是应用与服务器交互的基础,主要包括同步请求、异步请求以及HTTP协议中的两种主要请求方法:GET和POST。接下来,我们将详细探讨这些概念。 1. **同步请求**: - 同步请求是阻塞式的,当发送...
通过这个实例,开发者可以学习到如何在游戏环境中执行网络请求,获取和处理服务器数据,这对于实现诸如用户登录、游戏数据同步、排行榜等功能至关重要。同时,理解如何在VS2010下设置和运行Cocos2d-x项目也是开发者...
在iOS开发中,Swift语言提供了强大的网络编程工具,其中之一就是`NSURLSession`。`NSURLSession`是Apple为iOS和macOS提供的一种高效、灵活的网络通信框架,可以处理HTTP及其他相关协议的网络请求。在这个"ios-swift-...
在iOS开发中,网络编程是不可或缺的一部分,尤其是在构建与云端应用交互的移动应用时。《iOS网络编程与云端应用最佳实践》这本书深入探讨了这一领域,提供了宝贵的实战经验和最佳实践。以下是一些关键知识点的概述:...
在iOS开发中,构建一个网络播放器涉及到许多关键知识点,主要涵盖了网络请求、数据解析、音频播放以及用户界面设计等方面。下面将详细阐述这些技术点。 1. **网络请求**:在“iOS网络播放器”中,首要任务是通过...
在iOS开发中,多线程是一项至关重要的技术,它能够帮助开发者实现应用程序的高效运行,提升用户体验。本文将深入探讨iOS中的多线程技术,包括NSOperation和GCD(Grand Central Dispatch)两种主要的实现方式,以及...
这些章节按照书中的结构排列,分别对应于CH01到CH07,每部分都揭示了iOS编程的关键概念和技术。 1. CH01:基础入门 这一章节通常会介绍iOS开发环境的搭建,如安装Xcode,理解iOS SDK,以及创建第一个“Hello, World...
2. **网络请求**:iOS中常用的是URLSession进行网络请求,包括同步和异步请求,确保在主线程中更新UI以避免卡顿。 3. **JSON解析**:解析返回的JSON数据,可以使用Swift内置的JSONSerialization类,或者第三方库如...
在iOS毕业设计中,开发一款音乐播放器是一个常见的项目,它可以帮助学生深入理解移动应用开发,特别是针对苹果平台的iOS。这款音乐播放器利用SVHTTPRequest库进行音乐的下载功能,这表明它涉及到网络编程、多媒体...
在iOS开发中,文件的上传和下载是常见...此外,现代的iOS开发中,通常会推荐使用Swift,但Objective-C的这部分知识对于理解iOS网络编程仍然非常重要。希望这个详细的解释能帮助你更好地理解和实施文件上传和下载功能。
在iOS开发中,网络编程是不可或缺的一部分,它使得应用程序能够与服务器进行数据交换,实现诸如下载、上传、同步等功能。本资源"iOS-Network:iOS网络高级编程源代码"聚焦于这一主题,提供了丰富的源码示例,帮助...
【iOS编程课程】是针对苹果移动设备开发的深入学习教程,主要聚焦于使用Apple的Swift语言进行应用程序开发。本课程适合对iOS开发感兴趣,希望通过学习掌握iOS应用开发技能的初学者,同时也为有一定编程基础的开发者...
AFNetworking是iOS开发中的基石之一,它提供了全面的HTTP客户端功能,包括GET、POST、PUT、DELETE等各种HTTP方法,支持异步和同步请求,还包含了上传和下载操作。它的设计模式基于 Blocks 和 NSOperations,使得网络...