使用AFNetworking遇到的bug的决解方案

2017-02-07  本文已影响24人  善男信Lee

阐述:

在获取网络数据的时候,我们一般会使用到一个非常著名的框架:AFNetworking框架,可以说,这是作为iOS工程师必备的框架之一:

这是一个非常强大的框架,对于发送异步请求来说,简直没有比这个更好用了,不过,在使用的过程中,我们可能遇到这样一个bug:如下

连接出错 Error Domain=com.alamofire.error.serialization.response Code=-1016 
"Request failed: unacceptable content-type: text/html" UserInfo=
{com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x7f93fad1c4b0> 
{ URL: http://c.m.163.com/nc/article/headline/T1348647853363/0-140.html } 
{ status code: 200, headers { .....}
...... 
 22222c22 626f6172 64696422 3a226e65 77735f73 68656875 69375f62 6273222c 22707469 6d65223a 22323031 362d3033 2d303320 31313a30 323a3435 227d5d7d>,
 NSLocalizedDescription=Request failed: unacceptable content-type: text/html}
说明:

由于数据很多,所以返回的请求体,和响应体部分我用省略号(......)代替了,但是,通过上面的返回的信息,我们不难看出,状态码200,而且也有一堆数据,但是在tableViewCell中就是没有显示,在最后的时候还出现"NSLocalizedDescription=Request failed: unacceptable content-type: text/html}" 这样一句话:

分析:那个这个错误是什么原因造成的呢?

因为manager有一个responseSerializer属性,它只设置了一些固定的解析格式.其中不包括text/html这种数据的格式.所以解析报错.

我们来看一下AFNetworking解析格式的底层:

self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];

通过底层,我们也可以看见,确实是没有text/html这种数据的格式,

那如何解决这个问题呢?

错误的解决方法如下:

解决方法1: 直接给acceptableContentTypes属性添加类型

着手解决:

self.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"application/json", @"text/json" ,@"text/javascript", nil];
ae6Njir.png!web.png

解决之后:
通过执行结果可以很明显的看得出,我们已经非常成功的获取到数据:

当然有很多方法.

上一篇下一篇

猜你喜欢

热点阅读