(十三)-利用MBProgressHUD进行异步获取数据

2024-05-31 06:48

本文主要是介绍(十三)-利用MBProgressHUD进行异步获取数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

IOS开发---菜鸟学习之路--(十三)-利用MBProgressHUD进行异步获取数据

本章将介绍如何利用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文件的修改

复制代码
#import <UIKit/UIKit.h>
#import "PullingRefreshTableView.h"
#import "MBProgressHUD.h"
@interface NEWSViewController : UIViewController< MBProgressHUDDelegate,PullingRefreshTableViewDelegate,UITableViewDelegate,UITableViewDataSource>{NSInteger allcount;MBProgressHUD *HUD;
}
@property(nonatomic,retain) NSString *pid;
@property(nonatomic,assign) NSInteger allcount;
@property (nonatomic) BOOL refreshing;//是否刷新
@property (assign,nonatomic) NSInteger page;//页数
@property (retain,nonatomic) PullingRefreshTableView *tableView; //tableview
@property (retain,nonatomic) NSMutableArray *list;//数据
@end
复制代码

需要引入头文件MBProgressHUD.h

然后添加代理MBProgressHUDDelegate

接着增加一个属性MBProgressHUD *HUD;

完整了.h文件后 就是.M文件了

.m文件的话首先需要增加一个如下的方法

复制代码
#pragma mark -
#pragma mark MBProgressHUDDelegate methods- (void)hudWasHidden:(MBProgressHUD *)hud {// Remove HUD from screen when the HUD was hidded
    [HUD removeFromSuperview];HUD = nil;
}
复制代码

接着在loadView部分增加如下代码

    HUD = [[MBProgressHUD alloc] initWithView:self.view];[self.view addSubview:HUD];HUD.delegate = self;HUD.labelText = @"正在加载数据";HUD.dimBackground = YES;[HUD showWhileExecuting:@selector(initListData) onTarget:self withObject:nil animated:YES];

修改后的loadView代码是这样子的

复制代码
//加载界面
- (void)loadView
{[super loadView];_list = [[NSMutableArray alloc] init ];//初始化//_list=[[NSMutableArray alloc] initWithObjects:@"123",@"123",@"123", nil];_page=1;CGRect bounds = self.view.bounds;bounds.size.height -= 120.f;_tableView = [[PullingRefreshTableView alloc] initWithFrame:bounds style:UITableViewStyleGrouped];_tableView.pullingDelegate=self;_tableView.dataSource = self;_tableView.delegate = self;[self.view addSubview:_tableView];HUD = [[MBProgressHUD alloc] initWithView:self.view];[self.view addSubview:HUD];HUD.delegate = self;HUD.labelText = @"正在加载数据";HUD.dimBackground = YES;[HUD showWhileExecuting:@selector(initListData) onTarget:self withObject:nil animated:YES];
}
复制代码
 

initListData 的话就是我们最早使用GetWebInfo的版本我这边再复制一遍放在下面,方便大家查看

复制代码
-(void) initListData
{GetWebInfo *getwebinfo=[GetWebInfo alloc];NSString *myparameters=[[NSString alloc] initWithString:[NSString stringWithFormat:@"Method=GetNewsbyPage&type=公共新闻&rows=4&page=%d",_page]];getwebinfo.parameters=myparameters;NSString *webReturnMessage=[getwebinfo dogetWebInfo];NSData* jsonData=[webReturnMessage dataUsingEncoding:NSUTF8StringEncoding];NSArray *keys =   [NSJSONSerializationJSONObjectWithData:jsonDataoptions:NSJSONReadingMutableContainerserror:nil];allcount=[[keys valueForKey:@"total"] integerValue];[self.list addObject:[keys valueForKey:@"rows"]];[_tableView reloadData];//NSLog(@"%@",_list);// [self.list addObjectsFromArray:[keys valueForKey:@"rows"]];

}
复制代码

OK这样。。就完成了我们的异步数据获取。怎么样是不是都非常简单呀?

这篇关于(十三)-利用MBProgressHUD进行异步获取数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017525

相关文章

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

Python对PDF书签进行添加,修改提取和删除操作

《Python对PDF书签进行添加,修改提取和删除操作》PDF书签是PDF文件中的导航工具,通常包含一个标题和一个跳转位置,本教程将详细介绍如何使用Python对PDF文件中的书签进行操作... 目录简介使用工具python 向 PDF 添加书签添加书签添加嵌套书签Python 修改 PDF 书签Pytho

Java进行日期解析与格式化的实现代码

《Java进行日期解析与格式化的实现代码》使用Java搭配ApacheCommonsLang3和Natty库,可以实现灵活高效的日期解析与格式化,本文将通过相关示例为大家讲讲具体的实践操作,需要的可以... 目录一、背景二、依赖介绍1. Apache Commons Lang32. Natty三、核心实现代