由于iOS开发中常常涉及到网络数据交互的问题,同时因为iOS之前的自带框架略坑爹,同时有较好的第三方框架AFNetworking的存在,所以在这次项目的操作中使用AFNetworking进行网络层的数据交互。同时由于网络上大部分的AFNetworking使用教程还是使用2.0版本,所以在此介绍3.0版本的简单使用。
AFNetworking的使用主要分为三步:
1. 创建会话(Session)
2. 创建请求(request)
3. 创建任务(task),对数据进行上传。
同时由于数据上传主要分为POST和GET两种方法,所以对于两种不同的请求方式在request创建的时候回有所差别。
一、创建会话(Session)
区别:
defaultSessionConfiguration: 创建一个能够保存cookie和缓存的session。
ephemeralSessionConfiguration:创建一个不保存cookie和缓存的session。
backgroundSessionConfigurationWithIdentifier:创建一个支持http和https并且可以在后台运行的session。
默认情况下只要使用第一个defaultSessionConfiguration即可。
二、创建请求(Request)
请求中一般包含了我们需要传输的数据。所以所有上传的HTTP头文件的内容都包含在其中。
此处由于有分POST和GET,所以我们在创建请求的时候也要区分。
区别:
之所以使用NSMutableURLRequest而不是传统的NSURLRequest,是因为这里有一个Method参数用来区分是POST还是GET,而默认的NSURLRequest使用的是GET方法。
同时在加载过程中,通过formData来加载内部数据,从而构建HTTP头。
三、创建任务(Task)
任务的创建和任务的执行代码如下:
上面只是简单的Task创建和处理,最后返回的response中是返回的内容的头,responseObject是返回内容的body,由于是数据库的形式进行传输的,所以需要使用编码对二进制内容进行编译,从而获的对应的字符串内容。对于AFNetworking是异步传输数据的,所以如果需要更新页面的话,需要在else中通过调用主线程,从而更新UI。
常见问题及解决方法:
问题一:
问题:ERROR -1016
产生原因:使用POD加载库的时候,因为内部没有text这个类型,所以为了防止第三方库和POD的变更在代码中直接增加这个类型。
解决方法:
在创建Manager的时候加入以下代码:
问题二:
问题:ERROR 3840
产生原因:返回的内容没有按照JSON进行保存,JSON无法解析
解决方法:
在创建Manager的时候加入以下代码:
问题三:
问题四: