天天看點

AFNetworking3.0使用

其實大量參考了其他文章,但是這篇部落格是我寫的。

編輯于2016/01/04

github位址:https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-3.0-Migration-Guide#new-requirements-ios-7-mac-os-x-109-watchos-2-tvos-9--xcode-7

下面是AFNetworking的兩個參考位址:

http://www.jianshu.com/p/047463a7ce9b

http://www.open-open.com/lib/view/open1436603781395.html

AFNetworking 3.0.4是目前AFNetworking的最新版。可以使用pod search AFNetworking檢視最新可使用的版本.

3.0版本正式支援iOS7,Mac OS X的10.9,watch OS 2,tvOS 9和Xcode 7.适配其他版本請參考第一個文檔.

AFNetworking有以下特點:

1.之前版本基于NSURLConnection的API已經全部棄用,改為使用基于NSURLSession的API。

注:NSURLConnection的api已正式被蘋果棄用,雖然該API将繼續運作,但将沒有新功能将被添加。蘋果建議所有的項目遷移到基于NSURLSession的api。

2.下面幾個接口已經被廢棄:

  • AFURLConnectionOperation
  • AFHTTPRequestOperation
  • AFHTTPRequestOperationManager

    3.0的核心類為AFHTTPSessionManager.

3.有一些UI相關的類已經被重構過。

  • UIImageView+AFNetworking
  • UIWebView+AFNetworking
  • UIButton+AFNetworking

圖檔緩存的方法包括在内。

AFNetworking3.0的方法要更加直覺簡潔,我都覺得基本不用再進一步封裝了(之前的2.0我都會先封裝一次)。簡單的請求直接就是網址+參數的形式。檔案上傳隻是增加了一個新的接口而已。

話不多說,直接看接口吧:核心類是AFHTTPSessionManager

  1. //單例的接口
  2. + (instancetype)manager;
  3. //将get與post請求用不同的方法,還是很有愛的,下面的參數無需多說了
  4. - (nullable NSURLSessionDataTask *)POST:(NSString *)URLString
  5.                             parameters:(nullable id)parameters
  6.                               progress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgress
  7.                                success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success
  8.                                failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;
  9. //注意多了一個block,這個代理可以用來添加你要上傳的資料
  10. - (nullable NSURLSessionDataTask *)POST:(NSString *)URLString
  11.                    parameters:(nullable id)parameters
  12.     constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block
  13.                       success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success
  14.                       failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE;

好了,上面的内容隻涉及POST請求,因為其他請求的形式其實完全一樣,到AFHTTPSessionManager.h檔案看一眼就知道了。不過這裡說一下上傳檔案的用法:

  1.    [manager POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
  2.        //如果需要上傳檔案使用該方法
  3.        [formData appendPartWithFileData:data name:name fileName:fileName mimeType:@"image/jpeg"];
  4.    } progress:^(NSProgress * _Nonnull uploadProgress) {
  5.    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
  6.    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  7.    }];

注意這裡的formData是可變的,是以可以添加多組資料。是不是很友善?

不過這個最後一個參數mimeType 表示了上傳的類型,如果你不知道這個類型怎麼用字元串表示的話,請前往下面的網址參考:

http://www.iana.org/assignments/media-types/media-types.xhtml

我相信你不會太暈的。