一、背景介绍
对于移动端编程来讲,网络请求数据是最主要需要实现的功能了,如果移动端少了数据展示,也就缺少了很多的内容。
那么一旦要实现某个重大的功能,我们首先第一位的是看看原生怎么实现的,但是呢我们今天主要带大家看看第三方开源框架AFN在使用过程中所出现的问题。
二、基础代码
话不多说,先上基础代码,然后再一点点看出现的问题,并且解决问题
//先用将第三方框架导入进来,可以手动导入也可以通过pod加入,本处我采用手工导入
#import "ViewController.h"
#import "AFNetworking.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self afnRequestData1];
}
- (void)afnRequestData1{
NSString *urlString = @"http://baike.baidu.com/link?url=1McXFsRxWd2wVxenuZHAX_0Kn4_RAiPpv7jTp4_utVx-pY5MQJ_jCrakyuLKuf2s8G8rwZgjGJ6T_lWuumGDIncSv-GVSiHPrZH5YwA2sJi";
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"%s", __FUNCTION__);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
}
@end
三、问题分析和解决
1>首先运行刚刚贴上的基础代码,发现报如下错误
报出此错误的原因是因为我们没加ATS,加ATS的方式有两种
第一种:
第二种:
第二种的源码如下:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2>添加ATS后,再次运行发现这个响应错误码-1016,如图:
这个的意思是AFN不支持响应的内容为网页内容格式text/html,
那么需要添加一个字段的内容格式,代码如下:
//注意原有的三种格式也要加上
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil];
3>加上内容格式之后再次运行,报错如下:
错误意思:AFN默认是把接收到的数据当做Json来处理的,所以发现接收到的数据并不是以字典和数组作为顶级节点的Json格式数据,所以报错
问题原因:AFN默认解析的数据是Json,所以需要修改AFN对响应内容的处理方式(是按照json来处理呢,还是按照其他的来处理)
代码如下:
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
4>到此就能够收到返回的数据了,当然可能我们收到的是一张图片呢,那图片的内容格式又是如何呢?我们接下来测试一下,我上百度图片里扒一张照片,链接代码如下:
NSString *urlString = @"https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3495161387,2602242859&fm=23&gp=0.jpg";
报错如下:
添加内容格式:
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html",@"image/jpeg", nil];
到此我所要说的问题就说完了,如果大家有遇到其他的AFN报错问题,欢迎致电我的邮箱:1218424215@qq.com
Demo后期奉上,写的不好和有问题的地方希望大家积极指正,或者可以补全的地方可在下方评论
我是淘气的七禾,以上!