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); }
相關推薦
AFNetworking 2.0使用(持續更新)
匯入AFNetworking 2.0 資料夾,引入標頭檔案AFNetworking.h --------------- *使用NSURLSessionDownloadTask來下載一張圖片,並帶有下載進度(以下兩段程式碼是一起的,注意) NSProgress為iOS7新增加的類 // 定義一個
gcc 5.2.0 手動更新(親測)
注意:(不要在gcc-5.2.0 原始碼目錄中執行 configure,否則會報錯) 安裝操作如下: 0、yum 安裝 gcc yum -y install gcc gcc-c++ libstdc++ libstdc
輕量ORM-SqlRepoEx (十二)SqlRepoEx 2.0.1 至 2.2.0 版本更新說明
一、功能變化 (一)、強化特性支援 1、部分型別擁有複雜屬性; 2、有些屬性不是來源於資料庫 3、使用者在原來的程式碼中使用 SqlRepoEx ,減少欄位與資料庫欄位之間的衝突; 4、為支援新的特性及優化屬性讀寫,增加了 SimpleWritablePropertyMatche
AFNetworking 2.0獲取響應頭資訊
前文有提到在初始化的時候可以設定Http的頭資訊,這沒有任何問題,但是在筆者使用過程中,時常是要獲取Http返回的一些頭資訊,在初次用AFNetworking2.0新特性NSURLSessionDataTask的時候,為了獲取返回的頭資訊,搞了兩個晚上,先是度娘,谷歌,S
iOS-AFNetworking 2.0 和AFNetworking 3.0 區別及具體用法
在AFNetworking 3.0之前,底層是通過封裝NSURLConnection來實現的。 在AFNetworking 3.0之後,也就是在iOS 9.0 之後,NSURLConnection被棄用,蘋果推薦使用NSURLSession來管理網路請求,所
springmvc+mybatis登入驗證2.0(更新了使用session來進行儲存使用者值,登出後清除session),並進行了攔截器的設定
本次在之前的文章實現登入註冊的基礎上又進行了新的升級,主要是採用了session和攔截器來對功能進行完善 新的Controller層 package lyb.com.controller; import java.util.ArrayList; import java.u
【老孟Flutter】Flutter 2.0 重磅更新
![](https://img2020.cnblogs.com/other/467322/202103/467322-20210304231703972-1334367042.png) > **老孟導讀**:昨天期待已久的 Flutter 2.0 終於釋出了,Web 端終於提正了,春季期間我釋出的一篇
How ASP.NET Web API 2.0 Works?[持續更新中…]
throws case rep 生命 indexof http face auto 攔截 一、概述 RESTful Web API [Web標準篇]RESTful Web API [設計篇] 在一個空ASP.NET Web項目上創建一個ASP.NET Web API 2.
(持續更新)Django 2.0.5 關於Model field reference的中文官方翻譯及增加譯者注內容
本文件包含Field的所有API參考,其中包括Django提供的Field引數及Field型別。 如果內建Field無法實現,您可以嘗試使用django-localflavor(documentation),其中包含針對特定國家和文化定製的各種程式碼
全新的閃念膠囊,OneStep 1.5 以及 BigBang 2.0 更新後的 Smartisan OS 3.6 體驗
win .com googl 下午 老羅 free 好的 作者 沒有 本文標簽: OneStep1.5 BigBang2.0 SmartisanOS3.6 閃念膠囊 隨著堅果手機的發布,Smartisan OS 也得到了例行更新。包括了全新的閃念膠囊,OneStep 1.5
Core 2.0 的dll實時更新、https、依賴包變更問題及解決
runt cert 以及 rip cto onf 是把 文件夾 系統 今天所有開發環境已經遷移到mac OS下的Visual Studio Code + 命令行編譯發布,而運行服務器是CentOS7,和windows沒什麽關聯了。 只要你Relese編譯並在本地有一個
【從0開始Tornado建站】0.9版本號python站點代碼開源--持續更新中
分享 body clas .com tis https -m SM 。。 ? ? ? ? 從5月份開始【從0開始Tornado建站】這個專欄,開始一點一點把這個分類
構建vue專案(vue 2.x)時的一些配置問題(持續更新)
基於前文,使用vue-cli腳手架工具構建專案,並使用了webpack,那麼我在專案中遇到的一些與配置相關的問題將在這裡進行彙總。 1.程式碼檢查問題 由於我們在構建專案時,使用了Eslint對我們的專案做程式碼風格檢查,那麼不符合該風格的程式碼,將會發出警報,常見的就是空格的問題,如果沒有按照Eslin
EOSIO最新兩個版本1.1.5、1.2.0更新說明
EOSIO 1.1.5 發行說明 原文件參見:https://github.com/EOSIO/eos/releases/tag/v1.1.5 問題描述 修復net_plugin中未經檢查的CPU和記憶體增長(#5202) 當多個連線建立條目導致未經檢查儲存和處理增長時,net-pl
AFNetWorking(3.0)原始碼分析(四)——AFHTTPSessionManager(2)
在上一篇部落格中,我們分析了AFHTTPSessionManager,以及它是如何實現GET/HEAD/PATCH/DELETE相關介面的。 我們還剩下POST相關介面沒有分析,在這篇部落格裡面,我們就來分析一下POST相關介面是如何實現的。 multipart/form-data請
160個crackme 持續更新(1\2\3\4\6)
最近感覺自己啥都不會吧,就算會也就是點皮毛,還是練的太少了,從160個crackme開始 慢慢來吧,從簡單的開始 1.Acid burn OD動態除錯一下,靠字串定位打斷點,如下 跟進這個函式可以看到明文密碼 next 2.Afkayas.1 直接
ARKit學習之2.0基礎及案例解析(後續再更新)
為了方便AR開發交流,博主建立了一個群 :891555732,歡迎一起討論 一.多人共享資料 官方案例原始碼 : https://github.com/Unity-Technologies/SharedSpheres ①.獲取資料及儲
python呼叫虹軟2.0(全網首發)-更新中
python呼叫虹軟2.0目前沒有任何demo可以參考,自己研究了2個晚上終於把第一步做出來了,使用了opencv來載入和顯示圖片,龜速更新中 1 from ctypes import * 2 #人臉框 3 class MRECT(Structure): 4 _fields_=[(u'
python調用虹軟2.0(全網首發)-更新中
color 數組 需要 角度 ++ 加載 type 識別 vid python調用虹軟2.0目前沒有任何demo可以參考,自己研究了2個晚上終於把第一步做出來了,使用了opencv來加載和顯示圖片,龜速更新中 1 from ctypes import * 2 #人臉框
Bancor 2.0協議:通過智慧合約為數字資產提供持續流動性
Bancor 協議使智慧合約區塊鏈上的自動價格發現和自主流動機制成為可能。這些智慧Token擁有一個或者多個聯結器,連線到持有其他Token的網路,允許使用者直接通過智慧Token的合約,按照一個持續計算以保持買入賣出交易量平衡的價格,立即為已連線的Token購