1. 程式人生 > >AFNetworking 2.0使用(持續更新)

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.0AFNetworking 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購