AFNetworking 2.0使用(持续更新)

本人视频教程系列

 

导入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:@"http://images.cnitblog.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);
}
时间: 2024-09-28 11:41:05

AFNetworking 2.0使用(持续更新)的相关文章

300+篇运维、数据库等实战资料免费下载(文章+PDF+视频,持续更新)

2017年已过去一半,在此小编为大家精心整理了2017上半年热点事件解析.实战技术资料以及特别策划短视频系列,希望可以帮助大家更深入地回顾上半年的技术热点,并储备更充足的技术干粮继续2017的下一半. PART 1 峰会回顾资料 云栖大会 [上海云栖大会]2017云栖大会上海峰会资料合计(现场视频+PDF下载) [成都云栖大会]2017云栖大会成都峰会资料合计(现场视频+PDF下载) [南京云栖大会]2017云栖大会南京峰会资料合计(现场视频+PDF下载) 技术峰会 [运维/DevOps峰会]

[翻译] Working with NSURLSession: AFNetworking 2.0

Working with NSURLSession: AFNetworking 2.0   简单翻译,有很多错误,看官无法理解处请英文原文对照. http://code.tutsplus.com/tutorials/working-with-nsurlsession-afnetworking-20--mobile-22651 by Bart Jacobs3 Feb 2014 In the previous installments of this series, we've taken a cl

[翻译] AFNetworking 2.0

大名鼎鼎的开源网络库AFNetworking 2.0,目前只是翻译了Github上的链接文章,使用教程请点击 http://www.cnblogs.com/YouXianMing/p/3651462.html   https://github.com/AFNetworking/AFNetworking   AFNetworking is a delightful networking library for iOS and Mac OS X. It's built on top of the F

阿里巴巴大数据计算平台MaxCompute(原名ODPS)全套攻略(持续更新20171122)

  概况介绍 大数据计算服务(MaxCompute,原名ODPS,产品地址:https://www.aliyun.com/product/odps)是一种快速.完全托管的TB/PB级数据仓库解决方案.MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全.本文收录了大量的MaxCompute产品介绍.技术介绍,帮助您快速了解MaxCompute/ODPS. MaxCompute 2.0:阿里巴巴的大数

Spinnaker 1.0:持续的云交付平台

本文讲的是Spinnaker 1.0:持续的云交付平台[编者的话]Spinnaker 1.0 发布,本文介绍了Spinnaker的一些特性和新的更新,它们让Spinnaker成为伟大的企业级发布管理方案. [3 天烧脑式 Docker 训练营 | 上海站]随着Docker技术被越来越多的人所认可,其应用的范围也越来越广泛.本次培训我们理论结合实践,从Docker应该场景.持续部署与交付.如何提升测试效率.存储.网络.监控.安全等角度进行. 在Google,我们需要部署大量代码:每天上千个服务需要

这些开源项目,你都知道吗?(持续更新中...)[原创]

原文 这些开源项目,你都知道吗?(持续更新中...)[原创] Json.NET  http://json.codeplex.com/ Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Linq To JSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象.让你轻松实现.Net中所有类型(对象,基本数据类型等)和Json的转换.   Math.NET http://www.mathdotn

Struts2在开发中的一些异常总结(持续更新)

版权声明:尊重博主原创文章,转载请注明出处哦~http://blog.csdn.net/eson_15/article/details/51281079 目录(?)[+]          当被错误折磨半天后,突然找到解决办法了,那种快感--不是东京热可以给的了的--好来,不闲扯了,本文主要记录struts2在开发中会遇到的一些问题或者异常,方便后面查阅. 1. java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与目录(持续更新中...)

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与目录(持续更新中...) 曾几何时我想写一个系列的文章,但是由于工作很忙,一直没有时间更新博客.博客园园龄都1年了,却一直都是空空的,网上后台管理系统,权限管理系统多如猴毛,各个大虾都有自己的想法和方式.当然我还未能是大虾, 前言 做一件事情之前总会有前言,首先本项目的原型是我之前在一家公司研发的一个制造业ERP系统,已经上线并开始运行,按道理来说这是一套合格的系统方案.之前原型是 Asp.

怎样开发一款操作系统(持续更新ing)

在如今,市场上主流的操作系统不用想都应该知道是Android和IOS吧,还有一个WindowsPhone,不过现在它的市场连百分之四都不到,现在无论微软怎么鼓励开发者开发WP程序,甚至是自己掏腰包或帮忙写程序都没有多少程序员围观了,微软这几年的手机行业实在不景气啊!这几年来,在我们中国也有不少公司自己制作过移动操作系统(这里操作系统在下面统一使用OS代替了),但因为软件市场不景气都纷纷抛弃转型做Android的二次开发了. 但是现在我们中国也有了自己的OS了,那就是AliOS,AliOS原名是叫