接上一篇,这篇我们对我们的客户端加入KissXML,MBProgressHUD,AQridView这几个库,首先我们先加入KissXML,这是XML解析库,支持Xpath,可以方便添加更改任何节点。先从官方网站上下载KissXML这个库

https://github.com/robbiehanson/KissXML

接下来,将KissXML库中的KissXML文件夹拷入我们的工程中,如图

然后跟上次一样,我们通过File/Add File to "Tuan1"这个选项加入到我们的工程中,我们以同样的方法分别加入MBProgressHUD和AGridView这两个库

在Framework中加入QuartzCore.framework,因为AGridView需要用到。

接着我们在代码中加入

#import"MBProgressHUD.h"

#import"DDXML.h"

这二行,运行一下,如果没有报错的话,那这几个库我们就加入成功了。

接着我们更改一下storybord,将FirstViewController这个视图加入NavigationController,选中FirstViewController在主菜单Editor/Embed In/Navigation Controller,系统自动为我们加入NavigationController。

下面,我们将FirstViewController中清空,所有内容都删除

好了,到这一步,我们的视图基本都完成了,接下来就是编码了,首先我们来解析美团网团购信息

FirstViewController.h

[plain] view plaincopy

  1. #import <UIKit/UIKit.h>
  2. #import "ASIHTTPRequest.h"
  3. @interface KKFirstViewController : UIViewController<ASIHTTPRequestDelegate>
  4. @end

FirstViewController.m

[plain] view plaincopy

  1. #import "KKFirstViewController.h"
  2. #import "MBProgressHUD.h"
  3. #import "DDXML.h"
  4. #import "DDXMLElementAdditions.h"
  5. @interface KKFirstViewController (){
  6. MBProgressHUD *hud;
  7. NSMutableArray *arrays;
  8. }
  9. @end
  10. @implementation KKFirstViewController
  11. - (void)viewDidLoad
  12. {
  13. [super viewDidLoad];
  14. self.navigationItem.title = @"美团";
  15. //背景
  16. UIImage *bgImage = [UIImage imageNamed:@"bg-app.png"];
  17. self.view.backgroundColor = [UIColor colorWithPatternImage:bgImage];
  18. //HUD提示框
  19. hud = [[MBProgressHUD alloc] init];
  20. hud.labelText = @"载入数据...";
  21. //网址
  22. NSString *urlString = @"http://www.meituan.com/api/v2/beijing/deals";
  23. [hud showWhileExecuting:@selector(startHttpRequest:) onTarget:self withObject:urlString animated:YES];
  24. //因为hud需要显示在最前面,所以我们在NavigationController中加入
  25. [self.navigationController.view addSubview:hud];
  26. arrays = [NSMutableArray array];
  27. }
  28. //请求URL
  29. -(void)startHttpRequest:(NSString *)url{
  30. ASIHTTPRequest *httpRequest = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:url]];
  31. httpRequest.delegate = self;
  32. [httpRequest startSynchronous];
  33. }
  34. - (void)viewDidUnload
  35. {
  36. [super viewDidUnload];
  37. // Release any retained subviews of the main view.
  38. }
  39. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
  40. {
  41. return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
  42. }
  43. //请求结束
  44. -(void)requestFinished:(ASIHTTPRequest *)request{
  45. //移除提示框
  46. [hud removeFromSuperview];
  47. //返回解析后的数据,每一个Array包括一个字典
  48. arrays = [self xmlParser:[request responseData]];
  49. NSLog(@"%@", arrays);
  50. }
  51. //解析结点
  52. static NSString *kXPath_Item = @"//data";
  53. static NSString *kName_Deal = @"deal";
  54. static NSString *kName_Title = @"deal_title";
  55. static NSString *kName_Url = @"deal_url";
  56. static NSString *kName_Img = @"deal_img";
  57. static NSString *kName_Desc = @"deal_desc";
  58. static NSString *kName_Tips = @"deal_tips";
  59. //XML解析
  60. -(NSMutableArray *)xmlParser:(NSData *)data{
  61. NSMutableArray *array = [NSMutableArray array];
  62. //文档开始
  63. DDXMLDocument *xmlDoc = [[DDXMLDocument alloc] initWithData:data options:0 error:nil];
  64. //返回<data>中的所有元素
  65. NSArray *items = [xmlDoc nodesForXPath:kXPath_Item error:nil];
  66. //遍历每个元素
  67. for (DDXMLElement *item in items) {
  68. NSMutableDictionary *dict = [NSMutableDictionary dictionary];
  69. //返回<deal>中的所有元素
  70. NSArray *deals = [item elementsForName:kName_Deal];
  71. for (DDXMLElement *deal in deals) {
  72. //<deal_title>
  73. DDXMLElement *title = [deal elementForName:kName_Title];
  74. if (title) {
  75. [dict setObject:[title stringValue] forKey:kName_Title];
  76. }
  77. //<deal_url>
  78. DDXMLElement *url = [deal elementForName:kName_Url];
  79. if (url) {
  80. [dict setObject:[url stringValue] forKey:kName_Url];
  81. }
  82. //<deal_img>
  83. DDXMLElement *img = [deal elementForName:kName_Img];
  84. if (img) {
  85. [dict setObject:[img stringValue] forKey:kName_Img];
  86. }
  87. //<deal_desc>
  88. DDXMLElement *desc = [deal elementForName:kName_Desc];
  89. if (desc) {
  90. [dict setObject:[desc stringValue] forKey:kName_Desc];
  91. }
  92. //<deal_tips>
  93. DDXMLElement *tips = [deal elementForName:kName_Tips];
  94. if (tips) {
  95. [dict setObject:[tips stringValue] forKey:kName_Tips];
  96. }
  97. }
  98. [array addObject:dict];
  99. }
  100. return array;
  101. }
  102. //请求中止(出错)
  103. -(void)requestFailed:(ASIHTTPRequest *)request{
  104. [hud removeFromSuperview];
  105. NSError *error = [request error];
  106. NSLog(@"RequestError : %@", [error description]);
  107. }
  108. @end

这里面最重要的就是解析返回的XML数据,代码里面的注释也写得比较详细了,我想大家也应该能看得懂,取得数据后我们就可以显示在AQGridView中去了。这个内容我们放到第三篇中做详细介绍。

ios 团购信息客户端demo(二)的更多相关文章

  1. ios 团购信息客户端demo(一)

    团购信息客户端,主要整合了ASIHTTPREQUEST,KISSXML,AQGridView,MBProgressHUD这几个主要流行的IOS开发库,我们先来看一下效果图 首先我们新建一个IOS工程, ...

  2. ios 团购信息客户端demo(三)

    接上二篇的内容,今天我们就来介绍一下如何将解析出来的数据放入AQGridView中显示出来,因为我们的工程中已经将AQGridView导入了,所以我们在KKFirstViewController中直接 ...

  3. iOS开发:一个高仿美团的团购ipad客户端的设计和实现(功能:根据拼音进行检索并展示数据,离线缓存团购数据,浏览记录与收藏记录的批量删除等)

    大致花了一个月时间,利用各种空闲时间,将这个客户端实现了,在这里主要是想记录下,设计的大体思路以及实现过程中遇到的坑...... 这个项目的github地址:https://github.com/wz ...

  4. ecshop首页调用团购信息产品购买人数

    当我们在ecshop后台录入ecshop的团购信息之后,我们在ecshop的前台首页index.php里面,可以看到他能调用ecshop的团购商品信息,其中就包括团购商品的一些价格信息.但是如何在ec ...

  5. ios 团购分类页面(9宫格)

    =-= 命名有些错误,但功能实现,以后注意下命名规范 WJViewGroup.h #import <UIKit/UIKit.h> @interface WJViewGroup : UIVi ...

  6. iOS开发——UI进阶篇(二)自定义等高cell,xib自定义等高的cell,Autolayout布局子控件,团购案例

    一.纯代码自定义等高cell 首先创建一个继承UITableViewCell的类@interface XMGTgCell : UITableViewCell在该类中依次做一下操作1.添加子控件 - ( ...

  7. iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局

    iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局 一.项目文件结构和plist文件 二.实现效果 三.代码示例 1.没有使用配套的类,而是直接使用xib文 ...

  8. 【HELLO WAKA】WAKA iOS客户端 之二 架构设计与实现篇

    上一篇主要做了MAKA APP的需求分析,功能结构分解,架构分析,API分析,API数据结构分析. 这篇主要讲如何从零做iOS应用架构. 全系列 [HELLO WAKA]WAKA iOS客户端 之一 ...

  9. 苹果IOS内购二次验证返回state为21002的坑

    项目是三四年前的老项目,之前有IOS内购二次验证的接口,貌似很久都没用了,然而最近IOS的妹子说接口用不了,让我看看啥问题.接口流程时很简单的,就是前端IOS在购买成功之后,接收到receipt后进行 ...

随机推荐

  1. DataGridView DataSource 如何实现排序

    将数据绑定在下面的类中就可以实现排序 public class SortableBindingList<T> : BindingList<T> { private ArrayL ...

  2. bzoj 3653: 谈笑风生【dfs序+主席树】

    考虑b的两种情况,一种是p的祖先,这种点有min(k,de[p]-1)个,然后每个这种b都有si[p]-1个c点可选: 另一种是p的子孙,要求是在p的子树内且deep在de[p]+1~de[p]+k之 ...

  3. [Xcode 实际操作]八、网络与多线程-(15)使用网址会话对象URLSession下载图片并存储在沙箱目录中

    目录:[Swift]Xcode实际操作 本文将演示如何通过网址会话对象URLSession下载图片并存储在沙箱目录中. 网址会话对象URLSession具有在后台上传和下载.暂停和恢复网络操作.丰富的 ...

  4. mysql项目实战经验

    一.项目的编码设置   目的:避免出现莫名其妙错误,笔者曾经就碰到因编码不对返回null而浪费大量时间:统一的编码可以减少解析的时间,提高效率 1.1修改my.ini文件 一般在C:\Program ...

  5. Jquery | 基础 | 项目实践

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. C# 面向对象之封装

    封装是指将类的内部数据隐藏起来不让对象实例直接对其操作,C#中提供了属性机制来对类内部的状态进行操作. 在C#中封装可以通过public.private.protected和internal等关键字来 ...

  7. springJDBC 事物隔离

    五.Spring-jdbc的实现 第一步:导jar包 pom.xml <!--引入spring-beans节点--><dependency>    <groupId> ...

  8. babel-loader7和babel8版本的问题

    根据官网https://www.npmjs.com/package/babel-loader要对应版本 一.babel7.X版本 1.要安装的包  第1套包:npm i babel-core babe ...

  9. 自定义可伸缩的imageView

    直接上代码 /** * 自定义可伸缩的ImageView */ public class ZoomImageView extends ImageView { /** 画笔类 **/ private P ...

  10. jmeter中通过beanshell访问eclipse中导出jar中的java类的方法

    主要步骤 1.在eclipse中导出要引用的java代码为jar文件 2.将生成的jar文件放到jmeter的lib的ext目录下 3.在jmeter的jsr223处理器中导入要引用的java类型文件 ...