使用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
解决之后:
通过执行结果可以很明显的看得出,我们已经非常成功的获取到数据:
当然有很多方法.