IOS开发---菜鸟学习之路--(十三)-利用MBProgressHUD进行异步获取数据
2013-12-23 20:55
696 查看
本章将介绍如何利用MBProgressHUD实现异步处理数据。
其实我本来只是像实现一个加载数据时提示框的效果,然后问了学长知道了这个类,然后就使用了
接着就发现了一个“BUG”再然后就发现原来MBProgressHUD处理数据的时候是异步处理的
而所谓的“BUG”其实是在我实现了ASIFormDataRequest异步处理数据后又利用MBProgressHUD来显示加载数据框所导致的。
具体的BUG效果就是使用MBProgressHUD后提示信息只是闪一下就没了,但是数据还没加载过来,按理说应该是数据加载过来时候提示框才会消失的。
为什么会有这样的BUG呢?
其实大家在知道了MBProgressHUD也是异步处理后就能很轻松的想明白了
那是因为MBProgressHUD异步处理ASIFormDataRequest部分的获取数据,而ASIFormDataRequest也是异步处理的。
所以在MBProgressHUD调用ASIFormDataRequest的时候ASIFormDataRequest直接先返回PASS让他通过,自己去异步处理数据。
这就好像A叫B去买东西,B直接告诉A买好了,你直接开始下一步吧,但是实际上B叫了C去买菜。
好了直接拷贝下面一段内容也免的大家自己再百度了,
(地址是http://blog.csdn.net/ryantang03/article/details/7877120)可以了解细节。
MBProgressHUD是一个开源项目,实现了很多种样式的提示框,使用上简单、方便,并且可以对显示的内容进行自定义,功能很强大,很多项目中都有使用到。到GitHub上可以下载到项目源码https://github.com/jdg/MBProgressHUD,下载下来后直接把MBProgressHUD.h和MBProgressHUD.m拖入工程中就行,别忘了选择拷贝到工程。
看完上面的内容的话,我直接从实践出发告诉大家如何利用MBProgressHUD实现异步数据获取
首先是.H文件的修改
需要引入头文件MBProgressHUD.h
然后添加代理MBProgressHUDDelegate
接着增加一个属性MBProgressHUD*HUD;
完整了.h文件后就是.M文件了
.m文件的话首先需要增加一个如下的方法
接着在loadView部分增加如下代码
修改后的loadView代码是这样子的
initListData的话就是我们最早使用GetWebInfo的版本我这边再复制一遍放在下面,方便大家查看
OK这样。。就完成了我们的异步数据获取。怎么样是不是都非常简单呀?
其实我本来只是像实现一个加载数据时提示框的效果,然后问了学长知道了这个类,然后就使用了
接着就发现了一个“BUG”再然后就发现原来MBProgressHUD处理数据的时候是异步处理的
而所谓的“BUG”其实是在我实现了ASIFormDataRequest异步处理数据后又利用MBProgressHUD来显示加载数据框所导致的。
具体的BUG效果就是使用MBProgressHUD后提示信息只是闪一下就没了,但是数据还没加载过来,按理说应该是数据加载过来时候提示框才会消失的。
为什么会有这样的BUG呢?
其实大家在知道了MBProgressHUD也是异步处理后就能很轻松的想明白了
那是因为MBProgressHUD异步处理ASIFormDataRequest部分的获取数据,而ASIFormDataRequest也是异步处理的。
所以在MBProgressHUD调用ASIFormDataRequest的时候ASIFormDataRequest直接先返回PASS让他通过,自己去异步处理数据。
这就好像A叫B去买东西,B直接告诉A买好了,你直接开始下一步吧,但是实际上B叫了C去买菜。
好了直接拷贝下面一段内容也免的大家自己再百度了,
(地址是http://blog.csdn.net/ryantang03/article/details/7877120)可以了解细节。
MBProgressHUD是一个开源项目,实现了很多种样式的提示框,使用上简单、方便,并且可以对显示的内容进行自定义,功能很强大,很多项目中都有使用到。到GitHub上可以下载到项目源码
看完上面的内容的话,我直接从实践出发告诉大家如何利用MBProgressHUD实现异步数据获取
首先是.H文件的修改
#import<UIKit/UIKit.h> #import"PullingRefreshTableView.h" #import"MBProgressHUD.h" @interfaceNEWSViewController:UIViewController<MBProgressHUDDelegate,PullingRefreshTableViewDelegate,UITableViewDelegate,UITableViewDataSource>{ NSIntegerallcount; MBProgressHUD*HUD; } @property(nonatomic,retain)NSString*pid; @property(nonatomic,assign)NSIntegerallcount; @property(nonatomic)BOOLrefreshing;//是否刷新 @property(assign,nonatomic)NSIntegerpage;//页数 @property(retain,nonatomic)PullingRefreshTableView*tableView;//tableview @property(retain,nonatomic)NSMutableArray*list;//数据 @end
需要引入头文件MBProgressHUD.h
然后添加代理MBProgressHUDDelegate
接着增加一个属性MBProgressHUD*HUD;
完整了.h文件后就是.M文件了
.m文件的话首先需要增加一个如下的方法
#pragmamark- #pragmamarkMBProgressHUDDelegatemethods -(void)hudWasHidden:(MBProgressHUD*)hud{ //RemoveHUDfromscreenwhentheHUDwashidded [HUDremoveFromSuperview]; HUD=nil; }
接着在loadView部分增加如下代码
HUD=[[MBProgressHUDalloc]initWithView:self.view]; [self.viewaddSubview:HUD]; HUD.delegate=self; HUD.labelText=@"正在加载数据"; HUD.dimBackground=YES; [HUDshowWhileExecuting:@selector(initListData)onTarget:selfwithObject:nilanimated:YES];
修改后的loadView代码是这样子的
//加载界面 -(void)loadView { [superloadView]; _list=[[NSMutableArrayalloc]init];//初始化 //_list=[[NSMutableArrayalloc]initWithObjects:@"123",@"123",@"123",nil]; _page=1; CGRectbounds=self.view.bounds; bounds.size.height-=120.f; _tableView=[[PullingRefreshTableViewalloc]initWithFrame:boundsstyle:UITableViewStyleGrouped]; _tableView.pullingDelegate=self; _tableView.dataSource=self; _tableView.delegate=self; [self.viewaddSubview:_tableView]; HUD=[[MBProgressHUDalloc]initWithView:self.view]; [self.viewaddSubview:HUD]; HUD.delegate=self; HUD.labelText=@"正在加载数据"; HUD.dimBackground=YES; [HUDshowWhileExecuting:@selector(initListData)onTarget:selfwithObject:nilanimated:YES]; }
initListData的话就是我们最早使用GetWebInfo的版本我这边再复制一遍放在下面,方便大家查看
-(void)initListData
{
GetWebInfo*getwebinfo=[GetWebInfoalloc];
NSString*myparameters=[[NSStringalloc]initWithString:[NSStringstringWithFormat:@"Method=GetNewsbyPage&type=公共新闻&rows=4&page=%d",_page]];
getwebinfo.parameters=myparameters;
NSString*webReturnMessage=[getwebinfodogetWebInfo];
NSData*jsonData=[webReturnMessagedataUsingEncoding:NSUTF8StringEncoding];
NSArray*keys=[NSJSONSerialization
JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:nil];
allcount=[[keysvalueForKey:@"total"]integerValue];
[self.listaddObject:[keysvalueForKey:@"rows"]];
[_tableViewreloadData];
//NSLog(@"%@",_list);
//[self.listaddObjectsFromArray:[keysvalueForKey:@"rows"]];
}
OK这样。。就完成了我们的异步数据获取。怎么样是不是都非常简单呀?
相关文章推荐
- IOS开发---菜鸟学习之路--(十二)-利用ASIHTTPRequest进行异步获取数据
- IOS开发---菜鸟学习之路--(十九)-利用NSUserDefaults存储数据
- IOS开发---菜鸟学习之路--(二十一)-利用正则表达式解析URL获取其中的参数
- IOS开发---菜鸟学习之路--(二)-数据获取
- IOS开发---菜鸟学习之路--(二)-数据获取
- (十三)-利用MBProgressHUD进行异步获取数据
- IOS开发---菜鸟学习之路--(二十三)-直接利用键值对的方式来处理数据的感想
- IOS开发---菜鸟学习之路--(十八)-利用代理实现向上一级页面传递数据
- IOS开发---菜鸟学习之路--(九)-利用PullingRefreshTableView实现下拉刷新
- IOS开发---菜鸟学习之路--(十七)-利用UITableView实现个人信息界面
- IOS开发---菜鸟学习之路--(三)-数据解析
- IOS开发之在服务器端获取数据,保存网页的Demo学习
- IOS开发---菜鸟学习之路--(二十四)-iOS7View被导航栏遮挡问题的解决
- 从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发
- IOS开发---菜鸟学习之路--(二十)-二维码扫描功能的实现
- IOS开发---菜鸟学习之路--(二十二)-近期感想以及我的IOS学习之路
- IOS开发---菜鸟学习之路--(十五)-如何实现拍照功能
- IOS开发---菜鸟学习之路--(二十二)-近期感想以及我的IOS学习之路
- IOS开发---菜鸟学习之路--(十五)-如何实现拍照功能
- IOS开发---菜鸟学习之路--(八)-实现新闻页面