1. 程式人生 > >AFNetWorking框架使用的“兩個大坑”——修改請求方式和響應方式

AFNetWorking框架使用的“兩個大坑”——修改請求方式和響應方式

引子

AFNetWorking是目前國內開發網路應用使用最多的第三方框架之一(ASI框架也具有其自身優勢),對 NSURLConnection 和NSURLSession 做了封裝(後期維護中逐漸剔除了其中NSURLConnection的應用)。因其提供了豐富的 API,和完善的錯誤解決方案,使用起來較簡單而收到廣大程式設計師同胞的喜愛。
在AFNetWorking的使用中,有兩個錯誤是非常典型的,即需要根據需求修改預設的請求方式和響應方式,下面是AFNetWorking框架預設的請求方式和響應方式

這裡寫圖片描述

一、修改預設的請求方式

通過上圖可以看出,AFNetWorking框架預設的請求資料的方式為普通二進位制,但是在實際開發中我們經常會遇到傳給伺服器的並不是普通二進位制資料,有可能是字典等。例如下面我們模擬一個簡單的登入操作,將字典傳給伺服器。這時就要做如下設定

    //1.3 改請求的預設的序列化方式
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    //2.給伺服器傳送一個JSON格式的二進位制
    NSDictionary *param = @{@"username":@"xiaohua",@"age":@18};
    /**
    注:這時就能直接把para作為manager POST的引數傳遞了,這裡其實AFN幫我們將 param 呼叫 [NSJSONxxx dataxxx] 轉成JSON格式的二進位制,然後發給伺服器
     */

二、修改預設的響應方式

通過上圖可以看出,AFNetWorking框架預設的響應資料的方式為JSON,但是伺服器返回給我們的資料不一定都是JSON,這會根據開發的需求而變化,這時我們就需要修改預設解析資料的方法

//將響應資料型別修改為普通二進位制
 manager.responseSerializer = [AFHTTPResponseSerializer serializer];

同時AFN接受資料的格式也是有限制的,通過檢視框架的原始碼我們可以看到它預設可以哪些資料型別,當我們要傳的資料不在其接收範圍的話,就會報錯,這時我們要進行以下操作

//text/html就是要新增的接收資料格式
manager.responseSerializer
.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];