ios 团购信息客户端demo(二)

接上一篇,这篇我们对我们的客户端加入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.   
  4.   
  5. @interface KKFirstViewController : UIViewController<ASIHTTPRequestDelegate>  
  6.   
  7.   
  8. @end  



 

FirstViewController.m

 

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

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

posted @ 2014-02-14 15:20  yulang  阅读(193)  评论(0编辑  收藏  举报