《IOS应用开发基础教程》.ppt

上传人:创****公 文档编号:4258066 上传时间:2021-07-05 格式:PPT 页数:34 大小:1.75MB
返回 下载 相关 举报
《IOS应用开发基础教程》.ppt_第1页
第1页 / 共34页
《IOS应用开发基础教程》.ppt_第2页
第2页 / 共34页
点击查看更多>>
资源描述

《《IOS应用开发基础教程》.ppt》由会员分享,可在线阅读,更多相关《《IOS应用开发基础教程》.ppt(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、IOS应用开发基础教程,QQ学习群:262779381,第十章 iOS网络编程,QQ学习群:262779381,教学目标: 1.了解HTTP协议的基本概念以及机制。 2.掌握IOS中HTTP访问网络的方法,包括同步和异步。 3.掌握Json的基本格式以及解析方法。,QQ学习群:262779381,10.1HTTP概述,HTTP协议是Hypertext Transfer Protocol的简写,即超文本传输协议。我们知道网络中使用的基础协议都是TCP/IP协议,而HTTP协议是基于TCP/IP协议之上的应用层协议。 HTTP协议支持C/S网络结构,是无连接协议,即每一次请求建立连接,当服务器处理

2、完客户端请求后,应答完成后就会断开连接,不会一直占用网络资源。具体的HTTP协议请求过程如图所示。,QQ学习群:262779381,QQ学习群:262779381,从图中我们也可以总结出HTTP协议的网络请求步骤有如下4步: 建立TCP连接 发送HTTP请求 接受HTTP应答响应 断开TCP连接 IOS中为我们提供了请求网络和返回网络响应的类,分别是NSURLRequest(NSMutableRequest)和NSURLResponse(NSMutableResponse)。在说到HTTP时,还有一个不能不提的概念就是URL,URL的全称是Uniform Resource Locator(统一

3、资源定位符),通过一个URL可以找到互联网中唯一的一个网络资源。 一个URL包括以下几个部分:http:/hostname:port/absolute path?query http代表网络协议,还有ftp和file协议。 hostname代表服务器端名称 port代表服务器端端口号 absolute path代表请求的绝对路径 query代表请求的具体参数 IOS中使用NSURL类管理URL。,QQ学习群:262779381,HTTP协议总共定义了8种请求方法:OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE和CONNECTION。当我们使用web服务器作为服务器

4、访问网络时,必须实现GET和HEAD方法,其他的方法都是可选的。 在本小节中,我们重点讲解GET方法和POST方法。 首先我们列出几种主要方法的名称以及解释,帮助读者了解这些方法的含义,见下表。,10.2HTTP常用方法与使用,QQ学习群:262779381,10.2.1同步GET方法,IOS自带方法 新建一个XCode项目,选择Singe View Application模板,在.m文件中,实现一个网络请求get方法,并在viewDidLoad方法中调用self getMethod 1./同步GET方法 2.- (void)getMethod 3. 4. /创建URL 5. NSURL *u

5、rl=NSURL URLWithString: 6. /创建GET请求 7. NSURLRequest *request = NSURLRequest allocinitWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10; 8. /链接服务器 9. NSData *received = NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil; 10. NSString *str = NSSt

6、ring allocinitWithData:received encoding:NSUTF8StringEncoding; 11. NSLog(%,str); 12.,这是IOS自带的HTTP请求方法,通过NSURLRequest发送请求,并通过Response接受请求响应的信息,最后将信息通过字符串输出。 控制器输入部分信息如下: data: ,QQ学习群:262779381,QQ学习群:262779381,ASIHttpRequest方法 除了IOS为我们提供的请求方法,我们还可以使用第三方轻量级网络访问类库,ASIHttpRequest,在第九章的内容中,我们也使用过,这里再次介绍其G

7、ET方法的使用。 在项目中导入ASIHttpRequest需要的5个库。 libxml2.2.dylib libz.1.2.5.dylib SystemConfiguration.framework MobileCoreServices.framework CFNetwork.framework 然后引入ASIHTTPRequest.h头文件, 接下来重写getMothed方法。,QQ学习群:262779381,13.- (void)getMethod 14. 15. NSURL *url = NSURL URLWithString: 16. ASIHTTPRequest *request =

8、 ASIHTTPRequest requestWithURL:url; 17. request setRequestMethod:GET; 18. request startSynchronous; 19. NSData *netData = request.responseData; 20. NSString *String = NSString allocinitWithData:netData encoding:NSUTF8StringEncoding; 21.NSLog(data:%,String); 22. 可以看出,ASIHttpRequest请求方法更为简单,具体步骤如下: 通过

9、URL创建ASIHttpRequet连接请求。 选择请求方式。 开始请求 通过请求的responseData显示响应返回的数据。,QQ学习群:262779381,QQ学习群:262779381,10.2.2异步GET方法,因为阻塞线程的原因,在请求网络时,大部分都是使用异步方法,这就引入的代理的概念,通过代理方法监听请求过程,当请求完成,通过代理方法返回响应的请求响应结果。 1. /url地址 2. NSURL *url = NSURL URLWithString: 3. /创建请求 4. NSURLRequest *request = NSURLRequest allocinitWithUR

10、L:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10; 5. /连接服务器 6. NSURLConnection *connection = NSURLConnection allocinitWithRequest:request delegate:self; 与同步方法不同的是,在创建连接时需要设置代理delegate。异步方法的代理方法有如下3个。 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLRes

11、ponse *)response - (void)connectionDidFinishLoading:(NSURLConnection *)connection - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 第一个方法是请求过程中调用的方法,第二个方法是请求完成后调用的方法,第三个方法是当网络出现异常时调用的方法。,QQ学习群:262779381,10.2.3同步POST方法,同步POST方法的请求步骤如下代码所示。 1./创建URL 2.NSURL *url = NSUR

12、L URLWithString: 3./创建请求 4.NSMutableURLRequest *request = NSMutableURLRequest allocinitWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10; 5.request setHTTPMethod:POST;/设置请求方式为POST,默认为GET 6./设置请求参数 7.NSString *str = type=focus-c; 8.NSData *data = str dataUsingEncoding:NSUT

13、F8StringEncoding; 9.request setHTTPBody:data; 10./连接服务器 11.NSData *data = NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil; 12.NSString *result = NSString allocinitWithData:data encoding:NSUTF8StringEncoding; 从代码可以看出,同步POST方法的请求步骤如下: 创建URL 通过URL创建request请求 设置请求参数 设置HTTP

14、Body请求体 链接服务器 获取服务器响应结果信息,QQ学习群:262779381,10.2.4异步POST方法,异步POST方法只需在同步方法的基础上,设置代理即可。 1./创建url 2.NSURL *url = NSURL URLWithString: 3./创建请求 4.NSMutableURLRequest *request = NSMutableURLRequest allocinitWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10; 5.request setHTTPMeth

15、od:POST; 6.NSString *str = type=focus-c; 7.NSData *data = str dataUsingEncoding:NSUTF8StringEncoding; 8.request setHTTPBody:data; 9./连接服务器 10.NSURLConnection *connection = NSURLConnection allocinitWithRequest:request delegate:self;,QQ学习群:262779381,在通过Get或Post方法访问网络后,服务器端会根据访问请求的参数,返回相应的数据,但是这些数据都是特殊

16、的字符,这些字符根据服务器编程语言的不同又有不同的形式。那么我们怎么将这些特殊的字符转换成我们能够看懂的数据呢?这就需要用到JSon解析。 在本小节的内容中,我们使用的接口是中国气象局提供的开放测试API,地址是:,10.3服务器返回数据JSon解析,说到JSon解析格式,就不得不提XML格式,全称是可扩展标记语言,在计算机世界中,XML也可说是是人类世界中的一门语言,可以在计算机的世界中进行沟通。但随着计算机领域的发展,JSon作为一个轻量级的数据交换格式,正在逐渐替代XML格式,成为网络的通用格式。 以下给出一个JSon格式的范例: “title”: “速度与激情”, “rating”:

17、“8.8”, “type”:“动作”, “剧情”, “热血”, “release”: “location”: “中国”, “date”: “2014-3-2” ,QQ学习群:262779381,10.3.1JSon解析格式简介,从上述的JSon范例看出,JSon数据格式是以字典Dictionary形式进行存储,其中字典形式可以嵌套。在字典中,JSon数据格式是以键值对的形式存储,如范例中给出格式,拥有4个键值对,冒号“:”前为key键,“:”后为value值,通过key键可以唯一找到与之对应的value值。客户端与服务器通过JSon数据格式交互的示意图如图所示。,QQ学习群:262779381

18、,JSon解析的方法有很多,可以使用Apple提供的JSon解析方式(NSJSONSerialization),也可以使用第三方JSon解析库JSonKit、SBJson等。在本小节中,我们分别介绍NSJSONSerialization与SBJson解析方法。 在XCode中新建一个工程,使用Single View Application模板,首先在StoryBoard故事版中对视图进行布局,StoryBoard中的控件布局如图所示。,QQ学习群:262779381,10.3.2JSon解析方法介绍,QQ学习群:262779381,然后将UITextView和UIButton与头文件链接,形成

19、插座控件。注意UIButton的Connection方式为Action。 -viewController.h- 1.#import 2.interface ViewController : UIViewController 3.property (weak, nonatomic) IBOutlet UITextView *TextView; 4.- (IBAction)NSJsonSerialization:(id)sender; 5.- (IBAction)SBJson:(id)sender; 6.end 接下来在.m文件中实现NSJSONSerialization方法,因为它是Apple自

20、带的一个解析工具,是NSObject的一个子类,因此它不需要导入其它的框架,直接使用即可。,QQ学习群:262779381,7./NSJsonSerialization方法 8.- (IBAction)NSJsonSerialization:(id)sender 9. /创建一个request请求,加载指定NSURL对象 10. NSURLRequest *request = NSURLRequest requestWithURL:NSURL 11. URLWithString: 12. /将请求的URL数据放到NSData对象中 13. NSData *responseData = NSUR

21、LConnection sendSynchronousRequest:request returningResponse:nil 14. error:nil; 15. /将解析后的数据存入NSDictionary中 16. NSDictionary *dataDic = NSJSONSerialization JSONObjectWithData:responseData 17. options:NSJSONReadingMutableLeaves error:nil; 18. NSDictionary *weatherInfo = dataDic objectForKey:weatherin

22、fo; 19. /TextView显示解析信息 20. _TextView.text = NSString stringWithFormat:今天是 % % % 的天气预报情况是:% %,weatherInfo objectForKey:date_y,weatherInfo objectForKey:week,weatherInfo objectForKey:city,weatherInfo objectForKey:weather5,weatherInfo objectForKey:temp1; 21.,QQ学习群:262779381,NSJSONSerialization因为是Apple原

23、生态的一种解析方式,从IOS5版本开始使用,它的效率其实在几种解析工具中是最好的,使用简单,也不需要引入其他框架,便于使用。,QQ学习群:262779381,接下来实现SBJson方法,该方法是第三方解析库,因此需要引入SBJson框架文件,并在文件中引入“SBJson.h”头文件。SBJson下载地址如下: 在viewController.m文件中实现SBjson解析方法。 22.#import SBJson.h 23./SBJson方法 24.- (IBAction)SBJson:(id)sender 25. /创建一个request请求,加载指定NSURL对象 26. NSURL *ur

24、l = NSURL URLWithString: 27. NSString *jsonString = NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding 28. error:nil; 29. /创建SBJson解析实例Parser 30. SBJsonParser *parser = SBJsonParser alloc init; 31. /将解析后的数据存入NSDictionary中 32. NSDictionary *dataDic = parser objectWithString:jsonString

25、 error:nil; 33. NSDictionary *weatherInfo = dataDic objectForKey:weatherinfo; 34. _TextView.text = NSString stringWithFormat:今天是 % % % 的天气预报情况是:% % ,weatherInfo objectForKey:date_y,weatherInfo objectForKey:week,weatherInfo objectForKey:city, weatherInfo objectForKey:weather5, weatherInfo objectForKe

26、y:temp1; 35.,QQ学习群:262779381,UIWebView是IOS开发中用于展示网页的视图,它也是UIView的一个子类。在本小节中,我们将介绍如何使用UIWebView和HTTP协议制作一个简单的网页浏览器。 打开XCode,新建一个项目,使用Single View Application模板,在StoryBoard故事版中对视图进行布局,如图所示。,QQ学习群:262779381,10.4UIWebView与HTTP综合使用,QQ学习群:262779381,视图中,我们拖入了一个UIWebView控件,用于显示网页信息,一个UITextField控件,用于输入网址信息,还

27、有一个UIButton控件,用于实现访问动作。然后将这3个控件分别与.h文件链接,形成插座变量。 -viewController.h- 1. #import 2. interface ViewController : UIViewController 3. property (weak, nonatomic) IBOutlet UITextField *webTextField; 4. property (weak, nonatomic) IBOutlet UIWebView *webView; 5. - (IBAction)GOAction:(id)sender; 6. end,UIWebV

28、iew和UITextField的Connection方式是outlet,UIButton的Connection方式是Action。 接下来在viewController.m文件中实现UIButton的方法。 -viewController.m- 7.- (IBAction)GOAction:(id)sender 8. NSURLRequest *request =NSURLRequest requestWithURL:NSURL URLWithString:_webTextField.text; 9. if (_webTextField.text.length = 0) 10. UIAlert

29、View *alert = UIAlertView allocinitWithTitle:提示 message:请输入网址 delegate:self cancelButtonTitle:OK otherButtonTitles:nil, nil; 11. alert show; 12. 13. else 14. _webView loadRequest:request; 15. _webTextField resignFirstResponder; 16. 17.,QQ学习群:262779381,首先我们定义了NSURLRequest的实例,用于使用http创建访问网络请求,其中的url为U

30、ITextField文本输入框的内容。这里我们做了一个判断,当UITextField中没有输入,也就是长度为0,弹出提示框UIAlertView,提示用户输入网址,最后通过UIWebView的loadRequest方法,将request作为参数,进行网络访问。最后关闭键盘,通过resignFirstResponder丢失第一响应者。 运行模拟器,可以看到我们的运行结果如图所示。,QQ学习群:262779381,我们知道,当用户使用手机时,网络状态是不断变化的,有时候网络情况较好,读取网络较为顺利,但有时候网络较差,网页很久都打不开,那么我们如何进行判断呢?UIWebView为我们提供了一个UI

31、WebViewDelegate协议,用于对这些状态进行管理。 一下列出了UIWebViewDelegate协议的3个主要方法。 - (void)webViewDidStartLoad:(UIWebView *)webView:当网络开始加载时调用 - (void)webViewDidFinishLoad:(UIWebView *)webView:当网络加载完毕时调用 - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error:当网络加载出现错误时调用 现在我们在程序中实现这3个协议方法。首先要在头文件中引

32、入UIWebViewDelegate。,QQ学习群:262779381,18.#import 19.interface ViewController : UIViewController 20.property (weak, nonatomic) IBOutlet UITextField *webTextField; 21.property (weak, nonatomic) IBOutlet UIWebView *webView; 22.- (IBAction)GOAction:(id)sender; 23.property (nonatomic, retain) UIActivityInd

33、icatorView *activityIndicator; 24.end 这里我们还定义了一个UIActivityIndicatorView实例,用于在加载网页时显示,提示用户,增强用户体验。,QQ学习群:262779381,QQ学习群:262779381,然后在.m文件中实现协议方法。要实现协议方法,还有一个关键的步骤,就是设置UIWebView的delegate代理为self,我们在viewDidLoad方法中实现。 -viewController.m- 1. synthesize activityIndicator; 2. - (void)viewDidLoad 3. super vi

34、ewDidLoad; 4. _webView.delegate = self; 5. 6. #pragma mark - UIWebView Delegate 7. /webView正在加载方法 8. - (void)webViewDidStartLoad:(UIWebView *)webView 9. 10. UIView *backgroundView = UIView allocinitWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 11. self.view.frame.size.height); 12. backgroun

35、dView.tag = 1; 13. backgroundView.backgroundColor = UIColor blackColor; 14. backgroundView.alpha = 0.3; 15. self.view addSubview:backgroundView; 16. activityIndicator = UIActivityIndicatorView allocinitWithFrame:CGRectMake(0, 0, 35, 35); 17. activityIndicator setCenter:self.view.center; 18. activity

36、Indicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite; 19. backgroundView addSubview:activityIndicator; 20. activityIndicator startAnimating; 21. NSLog(网页正在加载中); 22. ,self.view.frame.size可以获得当前设备的宽度和高度,可放在设备适配时使用。 47./webView结束加载方法 48.- (void)webViewDidFinishLoad:(UIWebView *)web

37、View 49. 50. activityIndicator stopAnimating; 51. UIView *view = (UIView *)self.view viewWithTag:1; 52. view removeFromSuperview; 53. NSLog(网页加载结束); 54. 通过viewWithTag方法获取与tag值相匹配的视图。 55./webView加载出现错误方法 56.- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 57. 58. NSLog(网页加载失

38、败%,error); 59. error做为错误参数会显示访问网络错误的原因。,QQ学习群:262779381,QQ学习群:262779381,我们在webViewDidStartLoad方法中创建了一个视图,并将它的背景色设置为黑色,alpha透明度设置为0.3,并添加了ActivityIndicator实例,用于在加载网络时显示,实例通过starAnimation和stopAnimation方法控制实例的转动与停止。然后在webViewDidFinishLoad方法中移除该视图,并停止动画。最后在didFailLoadWithError方法中打印错误信息。,本章中首先对HTTP协议进行了介绍,并介绍了HTTP的相关方法。然后通过例子对HTTP协议中的GET方法和POST方法进行讲解,分别讲解了其方法的同步和异步访问方法,并比较了它们之间的优缺点。最后介绍了UIWebView的使用,并制作了一个简易的网页浏览器。,QQ学习群:262779381,本章小结,课后习题 1.查阅相关资料,掌握HTTP协议知识。 2.比较IOS自带网络访问类和其他开源类访问网络的优缺点,并给出自己的见解。 3.使用异步get方法获取电影的最新资讯(可查阅聚合数据),并用SBJson进行数据解析,将最后解析的数据显示在UITableView中。,QQ学习群:262779381,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁