码迷,mamicode.com
首页 > 其他好文 > 详细

数据下载 - delegate 形式的异步请求

时间:2015-08-31 10:14:45      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:异步   delegate   数据   下载   ios开发   

下载数据可以使用同步请求,异步请求

之前有讲到NSString 、 NSData 类型的同步请求

有NSURLConnection 形式的同步请求

异步请求有block 形式的异步请求,我们需要创建一个队列 在block 内部实现

但是我们最常用的是 delegate 形式的异步请求

#import "ViewController.h"

@interface ViewController ()<NSURLConnectionDataDelegate>


@property(nonatomic,weak)IBOutlet UIButton *button;
@property(nonatomic,weak)IBOutlet UIImageView *imageView;
@property(nonatomic,weak)IBOutlet UIProgressView *progressView;

@property(nonatomic,retain)NSString *myURLStr;
@property(nonatomic,retain)NSMutableData *result;
@property(nonatomic,assign)float totalSize;



@end

@implementation ViewController


//懒加载
-(NSMutableData *)result
{
    if(_result == nil)
    {
        //_result = [[NSMutableData alloc]init];
        _result = [NSMutableData data];
    }
    return _result;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}


-(IBAction)downloadBegin:(id)sender{
    self.myURLStr = @"http://farm3.staticflickr.com/2846/9823925914_78cd653ac9_b_d.jpg";
    //self.myURLStr = @"http://photo.candou.com/i/114/826ea823e8ffe792a6fda9e126f6c404";
    
    //[self syncDownloadWithConnection];
    //[self asyncDownloadWithBlock];
    [self asyncDownloadWithDelegate];
}
//连接有相应,开始下载
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    
    self.progressView.hidden = NO;
    //获取数据的总长度
    self.totalSize = response.expectedContentLength;
    
    NSLog(@"%@",NSStringFromSelector(_cmd));
}

//调用表示正在接受数据 根据大小反复不间断接受
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [self.result appendData:data];
    
    float pv = self.result.length /self.totalSize;
    
    self.progressView.progress = pv;
    
    NSLog(@"下载进度%f",pv);
    NSLog(@"%@",NSStringFromSelector(_cmd));
    
}
//调用证明下载完毕
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    
    self.progressView.hidden = YES;
    
    self.imageView.image = [UIImage imageWithData:self.result];
    NSLog(@"%@",NSStringFromSelector(_cmd));
}
//连接发生错误 下载失败
//1.断网了
//2.网址出错了
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    
    self.progressView.hidden = YES;
    
    NSLog(@"%@",NSStringFromSelector(_cmd));
    NSLog(@"下载失败");
}
#pragma mark -NSURLConnection异步请求-
//Delegate 形式的异步请求

-(void)asyncDownloadWithDelegate{
    NSURL *url = [NSURL URLWithString:self.myURLStr];
    
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];
    
    self.result.length = 0;
    
    [NSURLConnection connectionWithRequest:request delegate:self];
    
    
}

技术分享

版权声明:本文为博主原创文章,未经博主允许不得转载。

数据下载 - delegate 形式的异步请求

标签:异步   delegate   数据   下载   ios开发   

原文地址:http://blog.csdn.net/u012701023/article/details/48129067

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!