iOS网络篇-NSURLSessionDownloadTask进度下载(续上节)

简述:

在上一节中介绍了一下NSURLSession,也介绍了一下NSURLSessionDownloadTask的普通下载图片使用,并没有使用到具有进度的下载,那么在这一节中,我们看看如何使用进度下载,实时的进行界面的更新,这里的界面的更新也就是我们的Progress View(进度条)控件进度的一个更新

代码:

1、首先在storyboard里面拖入一个Progress View(进度条)控件,并且在控制器中拖入Progress View属性,用于后面的界面更新
    @interface ViewController ()<NSURLSessionDownloadDelegate>
        @property (weak, nonatomic) IBOutlet UIProgressView *progressView;
    @end
2、完成上面的步骤了,那么现在就是进行三部曲了
    2.1、创建NSURLSession
    2.2、创建任务(task)
    2.3、执行任务

    - (void)viewDidLoad {
        [super viewDidLoad];
        // 1.创建NSURLSession
        /*
         第一个参数: 全局的配置
         第二个参数: 让谁成为session的代理
         第三个参数: 告诉系统代理方法在哪个线程中执行
         */
        //1.1创建URL
        NSURL *url = [NSURL URLWithString:@"http://d.pcs.baidu.com/file/2b66fa1c93d8322d5299a1befc59b16c?fid=204559171-250528-1042286675318370&time=1453435914&rt=sh&sign=FDTAERV-DCb740ccc5511e5e8fedcff06b081203-X%2Bcz8N4IQb25c4wIKAyYl1HHW2M%3D&expires=8h&chkv=1&chkbd=0&chkpc=&dp-logid=498837374116132296&dp-callid=0&r=107651804"];
        NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
        // 2、利用NSURLSessionDownloadTask创建任务(task)
        NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url];
        // 3、执行任务
        [task resume];
    }
3、基本上到这里就是设置代理了,代理一运行,我们就完事了,
    /*
     1.接收到服务器返回的数据
         bytesWritten: 当前这一次写入的数据大小
         totalBytesWritten: 已经写入到本地文件的总大小
         totalBytesExpectedToWrite : 被下载文件的总大小
     */
    - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
    {
        //给progressView赋值进度
        self.progressView.progress = 1.0 * totalBytesWritten / totalBytesExpectedToWrite;
    }

    /*
     2.下载完成
         downloadTask:里面包含请求信息,以及响应信息
         location:下载后自动帮我保存的地址
     */
    - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
    {
        //location为下载好的文件路径
        //NSLog(@"didFinishDownloadingToURL, %@", location);


        //1、生成的Caches地址
        NSString *cacepath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingString:downloadTask.response.suggestedFilename];
        //2、移动图片的存储地址
        NSFileManager *manager = [NSFileManager defaultManager];
        [manager moveItemAtURL:location toURL:[NSURL fileURLWithPath:cacepath] error:nil];

    }

    /*
     3.请求完毕
        如果有错误, 那么error有值
     */
    - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
    {
        if (!error) {
            NSLog(@"请求成功");
        }else{
            NSLog(@"请求失败");
        }

    }

补充

在代理中,我们有两个重要的代理方法:

  • 第一个接受服务器返回的数据,里面的话给我们传过来三个参数:
  • 1、当前返回数据的大小
  • 2、已经写入临时文件数据的大小
  • 3、下载数据的总大小

那么在这个代理方法里面就是设置好我们Progress View(进度条)控件的进度的,只要第二个重要的代理方法就是

  • 第二个就是下载完成之后,回调的方法,里面传给我们两个参数:

  • 1、请求信息已经响应信息

  • 2、下载完,文件保存的路径(路径为我们沙盒的temp临时文件夹,里面的数据随时可能被删除)

我们可以在这个方法中把所下载的文件,移动到某一个长期保存而不会随时删除的文件夹中,这里我是把它保存到我们的Caches中去了

结束

                  本章到此结束
            欢迎各位码友随意转载并指正
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,047评论 25 707
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,188评论 1 23
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,657评论 2 7
  • 柳哲 我研究柳氏文化20年,收藏的柳氏家谱就有100余种。其中有一套韩国《文化柳氏世谱》,资料特别丰富,史料价值极...
    柳志儒阅读 1,277评论 1 1
  • 一同事老师,人品只能呵呵哒 一起给学生晚辅,那态度就是典型得赶着去投胎。只想三下两下把学生全部驱回家。 一到九点,...
    颜小牛阅读 233评论 0 0