博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AFNetworking 2.0使用(持续更新)
阅读量:5837 次
发布时间:2019-06-18

本文共 4965 字,大约阅读时间需要 16 分钟。

 

导入AFNetworking 2.0 文件夹,引入头文件AFNetworking.h

---------------

*使用NSURLSessionDownloadTask来下载一张图片,并带有下载进度(以下两段代码是一起的,注意)

NSProgress为iOS7新增加的类

// 定义一个progress指针    NSProgress *progress;        // 创建一个URL链接    NSURL *url = [NSURL URLWithString:\                  @"http://wallpapers.wallbase.cc/rozne/wallpaper-3020771.jpg"];        // 初始化一个请求    NSURLRequest *request = [NSURLRequest requestWithURL:url];        // 获取一个Session管理器    AFHTTPSessionManager *session = [AFHTTPSessionManager manager];        // 开始下载任务    NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response)    {        // 拼接一个文件夹路径        NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];                // 根据网址信息拼接成一个完整的文件存储路径并返回给block        return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error)    {        // 结束后移除掉这个progress        [progress removeObserver:self                      forKeyPath:@"fractionCompleted"                         context:NULL];    }];        // 设置这个progress的唯一标示符    [progress setUserInfoObject:@"someThing" forKey:@"Y.X."];    [downloadTask resume];        // 给这个progress添加监听任务    [progress addObserver:self               forKeyPath:@"fractionCompleted"                  options:NSKeyValueObservingOptionNew                  context:NULL];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{    if ([keyPath isEqualToString:@"fractionCompleted"] && [object isKindOfClass:[NSProgress class]]) {        NSProgress *progress = (NSProgress *)object;        NSLog(@"Progress is %f", progress.fractionCompleted);                // 打印这个唯一标示符        NSLog(@"%@", progress.userInfo);    }}

*使用AFHTTPRequestOperation下载图片的操作,不过,没有进度显示(源码中也没有相关方法-_-!)

// 组织一个请求    NSURLRequest *request = \    [NSURLRequest requestWithURL:\     [NSURL URLWithString:@"https://images0.cnblogs.com/i/607542/201404/050759358125578.png"]];        // 建立请求操作    AFHTTPRequestOperation *requestOperation = \    [[AFHTTPRequestOperation alloc] initWithRequest:request];        // 进行操作的配置(下载图片,还有其他的类型)    requestOperation.responseSerializer = [AFImageResponseSerializer serializer];        // 设置获取数据的block    [requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)     {         // 源码中为并发线程池返回了主线程         NSLog(@"Response: %@", responseObject);              } failure:^(AFHTTPRequestOperation *operation, NSError *error)     {         // 源码中为并发线程池返回了主线程         NSLog(@"Image error: %@", error);     }];        // 开始执行    [requestOperation start];

*下载队列,且能在后台下载,关闭了应用后还继续下载(这个功能好^_^)

Upload and download tasks in background sessions are performed by an external daemon instead of by the app itself. As a result, the transfers continue in the background even if the app is suspended, exits, or crashes.

在后台进行上传或者下载任务的会话,是被系统的程序管理而不是应用本身来管理的.所以呢,当app挂了,推出了甚至崩溃了,这个下载还是继续着的

@interface DownloadsViewController (){    AFURLSessionManager *manager;}@end
// 配置后台下载会话配置    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"downloads"];        // 初始化SessionManager管理器    manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];        // 获取添加到该SessionManager管理器中的下载任务    NSArray *downloadTasks = [manager downloadTasks];        // 如果有下载任务    if (downloadTasks.count)    {        NSLog(@"downloadTasks: %@", downloadTasks);        // 继续全部的下载链接        for (NSURLSessionDownloadTask *downloadTask in downloadTasks)        {            [downloadTask resume];        }    }

 按按钮添加一个下载任务到manager中

- (void)addDownloadTask:(id)sender{    // 组织URL    NSURL *URL = [NSURL URLWithString:@"http://pic.cnitblog.com/avatar/607542/20140226182241.png"];        // 组织请求    NSURLRequest *request = [NSURLRequest requestWithURL:URL];        // 给SessionManager管理器添加一个下载任务    NSURLSessionDownloadTask *downloadTask = \    [manager downloadTaskWithRequest:request                            progress:nil                         destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {                             NSURL *documentsDirectoryPath = [NSURL fileURLWithPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]];                             return [documentsDirectoryPath URLByAppendingPathComponent:[targetPath lastPathComponent]];                         } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {                             NSLog(@"File downloaded to: %@", filePath);                         }];    [downloadTask resume];        // 打印下载的标示    NSLog(@"%d", downloadTask.taskIdentifier);}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载地址:http://nhccx.baihongyu.com/

你可能感兴趣的文章
Debian9.2 下使用vnstat查看服务器带宽流量统计
查看>>
NGINX + PHP-FPM 502
查看>>
mysql数据备份与恢复
查看>>
Openstack API常用命令
查看>>
OpenSSL漏洞凶猛来袭 慧眼恶意代码监测应对有方
查看>>
C语言 喝汽水问题
查看>>
LINUX中搭建DNS服务器,实现正向、反向以及访问不同DNS解析
查看>>
SCCM2012 R2实战系列之十:解决WDS服务无法启动问题(错误1067:进程意外终止)...
查看>>
怎么防止重复发送Ajax
查看>>
ubuntu 下安装 mysql
查看>>
Python json.dumps 中文乱码解决
查看>>
HTM5基础系列(一)---简介与HTML4与HTML5的区别
查看>>
Sharding-JDBC 最大努力型事务理解
查看>>
扩展segment数量
查看>>
cv.Mat 与 .txt 格式文件读写操作
查看>>
关于k-means聚类算法的matlab实现
查看>>
Git分支2
查看>>
一键安装Gitlab后的备份、迁移与恢复
查看>>
因为本人工作繁忙,精力有限,本博客停止更新。有兴趣的博友可以关注我在CSDN上的主博客...
查看>>
Node实现静态服务器
查看>>