文章分享至我的个人技术博客: https://cainluo.github.io/14986211698053.html


前言

虽然前面两讲都是说了NSURLSession的一些理论上的知识, 但我们现在起码对NSURLSession有个大概的了解, 并不会像一开始的那样, 一脸懵逼的看着, 这个请求是什么鬼, 那个方法是什么鬼, Task是什么东西, 如果没有去看的朋友们可以去看看前面两讲玩转iOS开发:NSURLSession讲解(一)和 玩转iOS开发:NSURLSession讲解(二), 大神就随意啦.

这里的工程是仿照RayWenderlich(需要翻墙)的一篇文章URLSession Tutorial: Getting Started, 喜欢看原文或者是Swift的朋友也可以去看看, 我这个是Objective-C版本的.

注意: 本工程是在Xcode 9 beta 2, iOS 11的环境下运行的.


搭建界面

这里我要说明一下, 原文里的界面是使用Storyboard来搭建的, 我这里是使用代码和Masonry, 这里再次和大神表示感谢.

搭建好的界面也很简单, 就一个UITableView, UITableViewCellUISearchBar, 就完事了, 布局的代码都在项目里, 由于个人没有什么艺术细胞, 所以界面略丑, 大家凑合着看吧.


项目架构

为了让大家阅读起来比较方便和清晰, 我这里用了我一向习惯的MVVM架构模式, 虽然文件多了点, 但每个文件的代码都保证在了200行之内, 个人感觉看起来还是比较舒服的.

实现下载

在项目里面有一个QueryService和一个DownloadService, 都是负责管理下载和一些网络请求, 由于代码太多了, 这里我就讲讲思路好了.

QueryService: 负责实现用UISearchBar的搜索网络请求, 当UISearchBar输入关键字的时候, 通过指定的URLQuery拼接成一条有效的搜索链接, 并且通过NSURLSessionDataTask进行网络请求, 成功后会进行数据的解析, 并且通过SearchModel进行组装, 然后添加到一个NSMutableArray对象里, 最后UITableView会通过这个NSMutableArray作为数据源来刷新整个UITableView.

DownloadService: 负责实现UITableViewCell通过DownloadModel点击开始下载, 暂停, 恢复下载, 取消下载等等操作.

当然这里我们还需要实现一个叫做NSURLSessionDownloadDelegateNSURLSessionDelegate两个协议, 分别实现:

// 下载完成后的操作方法
- (void)URLSession:(NSURLSession *)sessiondownloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location;// 正在下载时的操作方法
- (void)URLSession:(NSURLSession *)sessiondownloadTask:(NSURLSessionDownloadTask *)downloadTaskdidWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite;// 后台下载完成后的方法
- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session;
复制代码

这里面的实现可以去SearchSessionDelegate里面看看, 这里就不详细多说了.

整个项目的核心内容就在这里了, 更详细的细节, 大家可以去项目里自己看看哈, 这里就不浪费大家的时间了.

最终的效果:

总结

最后唠叨两句, 由于我这个只是Demo, 里面存在的Bug, 还有不完善的封装请大家多多见谅, 这里顺便推两个优秀的开源下载管理器HWIFileDownload, TCBlobDownload.

如果有童鞋想自己封装一个的话, 也可以去看看这几篇文章MCDownloadManager ios文件下载管理器, 手把手教你封装下载管理器, 还有这个经验贴iOS通用下载管理器-HJMURLDownloader.

祝大家学习愉快.


工程地址:

项目地址: https://github.com/CainRun/iOS-NetWork/tree/master/NSURLSession讲解(三)


最后

码字很费脑, 看官赏点饭钱可好

玩转iOS开发:NSURLSession讲解(三)相关推荐

  1. 玩转iOS开发:iOS 11 新特性《UIKit新特性的基本认识》

    文章分享至我的个人技术博客: https://cainluo.github.io/15099354591154.html 前两篇, 我们讲了Xcode 9的一些新特性, 可以更加方便我们去写" ...

  2. Adroid游戏开发实例讲解(三)-小蝌蚪找妈妈附源码

    Adroid游戏开发实例讲解(三)-小蝌蚪找妈妈附源码 程序之美 从小就听着小蝌蚪找妈妈的故事长大,我相信小伙伴们一定都不陌生,因为小学课本中,我们早早的就学过了小蝌蚪找妈妈这篇文章,它既是一篇文章, ...

  3. iOS开发备战金三银四·头条三面记录

    一面 一.自我介绍 简单介绍一下你自己吧 解析:简单介绍下自己的名字,教育背景,现在的工作,做过的项目 二.自我介绍衍生的口头问题 讲讲下你在你项目中做过的优化或者技术难点 解析:介绍了自己封装的一个 ...

  4. 玩转 iOS 开发:集成 AliPay - 支付宝

    文章转至: https://cainluo.github.io/14739456388212.html 作者感言 前面我已经写了一篇关于**WeChat SDK的支付篇, 那我们继续研究接下来的支付S ...

  5. 玩转iOS开发:5.《Core Animation》CALayer的Transforms

    文章转至我的个人博客: https://cainluo.github.io/14777052484078.html 作者感言 之前我们所了解的CALayer都是比较抽象化, 好在<Core An ...

  6. 玩转iOS开发:iOS 10 新特性《Siri Kit》

    文章分享至我的个人技术博客: https://cainluo.github.io/14977885999456.html Siri 众所周知Siri是苹果爸爸内置在iOS系统的一个语音助手, 自从在2 ...

  7. 玩转iOS开发:《iOS设计模式 — 单例模式》

    作者感言 有一段时间没有发博客了, 刚好现在忙完项目的需求, 现在可以闲下来写写博客, 顺便自己给自己复习巩固一下知识, 不过我在这里又要吐槽一句, 项目中遇到了一个单例的问题, 让我感到非常的蛋疼, ...

  8. 玩转iOS开发:iOS 8 新特性《UIVisualEffect》

    文章转至: https://cainluo.github.io/14730058185822.html 作者感言 在iOS 8发布的时候, Apple介绍了很多iOS 8的新特性, 比如什么Exten ...

  9. 玩转iOS开发:iOS 10 新特性《Thread Sanitizer》

    文章分享至我的个人技术博客: https://cainluo.github.io/14971830645415.html Thread Sanitizer(TSan) Thread Sanitizer ...

最新文章

  1. API 面试四连杀:接口如何设计?安全如何保证?签名如何实现?防重如何实现?...
  2. JQuery 模糊匹配
  3. c语言课设报告河海大学,2020河海大学计算机学硕838经验贴
  4. 《疯狂Java讲义》7
  5. 关于word中公式和图片对齐的简易设置
  6. 成都东软学院计算机科学与技术系,成都东软学院计算机科学与技术系毕业设计(论文)工作实施细则成都东软学院计算机科学与技术系毕业设计(论文)工作实施细则.doc...
  7. ic designer
  8. linux加载内核后如何运行app,Android app启动过程
  9. mysql版本不同会导致语法错误码_神奇的 SQL,Group By 真扎心,原来是这样!
  10. python3-Anaconda3 基本使用
  11. 【2016年第2期】专题导读:大数据与社会治理
  12. Flink java.lang.NoClassDefFoundError: org/apache/flink/api/common/functions/FlatMapFunction
  13. bootstrap table通过ajax获取后台数据展示在table
  14. vue项目部署iis后 乱码_vue项目的自动化部署
  15. .net 根据银行卡获取银行信息
  16. VB.net小技巧——VB中调用matlab
  17. 没有超级英雄?自己做一个java漫威英雄手办商城系统
  18. 虚幻引擎图文笔记:The emitter is GPU but the fixed bounds checkbox is not set警告的解决
  19. 银行大数据应用案例(研讨会整理)
  20. 解析XML文件(字符串)的两种方法-----SAXReader 与 DocumentHelper

热门文章

  1. delphi 企业微信消息机器人_企业微信—群聊机器人
  2. Unity 2017 Game Optimization 读书笔记(2)Scripting Strategies Part 2
  3. scipy.ndimage.zoom上采样与下采样
  4. 深度学习鼻祖杰夫·辛顿及巨头们的人才抢夺战
  5. 2019春季学期第四周作业
  6. 在Winform中菜单动态添加“最近使用文件”
  7. 【FBI WARNING】一些Noip的黑科技 持续整理!
  8. Entity Framework With Oracle
  9. [Buzz Today]2012.08.08
  10. Dreamweaver使用详解