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];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,222评论 19 139
  • AFN简介 目前国内开发网络应用使用最多的第三方框架 是专为 Mac OS & iOS 设计的一套网络框架 对 N...
    真巧了_嘿阅读 5,192评论 0 0
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 14,776评论 0 15
  • github排名https://github.com/trending,github搜索:https://gith...
    小米君的demo阅读 10,308评论 2 38
  • 一、事业发展: •核心身份(南柱赫部落):集结热爱南柱赫的粉丝,以及发展扩大南柱赫部落。 •价值线定位:部落处于发...
    孤独与狗阅读 1,274评论 0 0

友情链接更多精彩内容