导入第三方库SVProgressHUD
#import "ViewController.h"
#import "SVProgressHUD.h"
#import "MJRefresh.h"
#define URLSTR @"http://api.cy.daoyoudao.com/app/categorylist.do?groupid=10986&shopid=12185&clientid=201406022338385212253&curpage=1&pagesize=50&versionrelease=ios_"
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource,NSURLConnectionDelegate,NSURLConnectionDataDelegate>
@property(retain)NSMutableArray * dataSource;
@property(retain)UITableView * tableView;
@property(retain)NSMutableData * muData;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_muData=[NSMutableData new];
self.automaticallyAdjustsScrollViewInsets=NO;
self.title=@"异步请求doem";
self.view.backgroundColor=[UIColor whiteColor];
self.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(rightAction)];
_dataSource=[NSMutableArray new];
_tableView=[[UITableView alloc]initWithFrame:CGRectMake(0, 64, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height-64) style:UITableViewStylePlain];
_tableView.delegate=self;
_tableView.dataSource=self;
[self.view addSubview:_tableView];
_tableView.tableFooterView=[[UIView alloc]initWithFrame:CGRectZero];
__weak __typeof(&*self)weakSelf=self;
//添加表格的头部刷新
// [_tableView addGifHeaderWithRefreshingTarget:self refreshingAction:@selector(reflshData)];
[_tableView addLegendHeaderWithRefreshingBlock:^{
[weakSelf.tableView.header beginRefreshing];
[weakSelf rightAction];
}];
//添加尾部刷新
[_tableView addLegendFooterWithRefreshingBlock:^{
[weakSelf.tableView.footer beginRefreshing];
[weakSelf rightAction];
}];
// _tableView.header=[MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewTopics)];
}
//-(void)reflshData
//{
// [self rightAction];
// [_tableView removeHeader];
// NSLog(@"头部刷新");
//}
//加载数据
-(void)rightAction
{
[SVProgressHUD showInView:self.view status:@"正在数据加载。。。。"];
NSURL * url=[NSURL URLWithString:URLSTR];
//NSURLRequest * request=[NSURLRequest requestWithURL:url];
//第一个参数是url参数
//第二个参数是缓存策略,当前NSURLRequestUseProtocolCachePolicy是直接从网络是获取
/*
其中缓存协议是个枚举类型包含:
NSURLRequestUseProtocolCachePolicy(基础策略,直接从网络上拉取)
NSURLRequestReloadIgnoringLocalCacheData(忽略本地缓存)
NSURLRequestReturnCacheDataElseLoad(首先使用缓存,如果没有本地缓存,才从原地址下载)
NSURLRequestReturnCacheDataDontLoad(使用本地缓存,从不下载,如果本地没有缓存,则请求失败,此策略多用于离线操作)
NSURLRequestReloadIgnoringLocalAndRemoteCacheData(无视任何缓存策略,无论是本地的还是远程的,总是从原地址重新下载)
NSURLRequestReloadRevalidatingCacheData(如果本地缓存是有效的则不下载,其他任何情况都从原地址重新下载)
*/
//第三个参数是请求超时的时间,秒数
NSURLRequest * request=[[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:45];
[NSURLConnection connectionWithRequest:request delegate:self];
//发起请求
// NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
//同步请求
// NSData * data=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
// NSLog(@"%@",data);
NSLog(@"刷新UI");
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _dataSource.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString * cellID=@"cell";
UITableViewCell * cell=[tableView dequeueReusableCellWithIdentifier:cellID];
if (cell==nil) {
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID];
}
cell.textLabel.text=[_dataSource[indexPath.row]objectForKey:@"categoryname"];
return cell;
}
//请求已经成功建立的时候会调用此方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
//NSURLResponse这是网络请求返回是响应体
NSLog(@"111");
//清空_mydata的数据
[_muData setData:nil];
}
//服务器返回数据会调用此方法,这个会被多次调用,因为服务器一次返回的数据是有限制的,当此链接的资源过大或者过长,资源会被分为几次返回,因此data要拼接,当最后一次返回之后才是真正的完整的数据
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSLog(@"222");
//拼接二进制流对象
[_muData appendData:data];
}
//请求完成会调用此方法
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
[_tableView.header endRefreshing];
[_tableView.footer endRefreshing];
NSLog(@"333");
[SVProgressHUD dismissWithSuccess:@"请求完成"];
NSMutableDictionary * dic=[NSJSONSerialization JSONObjectWithData:_muData options:NSJSONReadingMutableContainers error:nil];
NSLog(@"dic:%@",dic);
NSArray * arr=[dic objectForKey:@"categorylist"];
[_dataSource removeAllObjects];
[_dataSource addObjectsFromArray:arr];
//主线程刷新表格
[_tableView reloadData];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end