NSURLConnection 异步请求

导入第三方库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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值