iOS AFNetworking 的異常處理

使用AFN框架訪問網路使開發便捷了許多。但是使用的時候仍然會出現一些意想不到的錯誤。本文詳細說明錯誤的原因,讓你知其然知其所以然。

錯誤1. Code=-1006、unacceptable text/html
訪問網絡直接進入failure回調:

failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
{
    NSLog(@"%@",error);
}];
輸出結果是:(已省略無關信息)
Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/html"

此錯誤意思是不能接收的返回值類型:text/html,即服務器返回了一個text/html類型的返回值。

出現原因爲AFN本身不能接受這種類型,默認接收類型只有application/json,text/json,text/javascript三種。

解決方案:爲AFN添加此接收類型:

AFURLResponseSerialization.m  文件中
//找到此行    
self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];
//修改爲
self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil];

此時運行一下看看,又懵逼了,還是直接進入了failure回調,錯誤如下。

錯誤2. Code=3840、JSON text did not start

NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set."

錯誤意思是Json並不是以array或者object開始的,換句話說即json的格式不正確。
出現原因是服務器返回的數據並非Json,但是AFN卻當成Json去強行解析,那報錯就不足爲奇了。

  manager.responseSerializer 的初值爲[super setResponseSerializer:responseSerializer];默認是json

解決方案:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//加上這一句即可
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章