引子
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"];