AFN之使用问题解析

一、背景介绍

对于移动端编程来讲,网络请求数据是最主要需要实现的功能了,如果移动端少了数据展示,也就缺少了很多的内容。
那么一旦要实现某个重大的功能,我们首先第一位的是看看原生怎么实现的,但是呢我们今天主要带大家看看第三方开源框架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>首先运行刚刚贴上的基础代码,发现报如下错误

AFN之使用问题解析_第1张图片
Snip20170429_2.png

报出此错误的原因是因为我们没加ATS,加ATS的方式有两种
第一种:

AFN之使用问题解析_第2张图片
Snip20170429_5.png

第二种:

AFN之使用问题解析_第3张图片
Snip20170429_8.png

第二种的源码如下:
NSAppTransportSecurity

NSAllowsArbitraryLoads


2>添加ATS后,再次运行发现这个响应错误码-1016,如图:

AFN之使用问题解析_第4张图片
Snip20170429_9.png

这个的意思是AFN不支持响应的内容为网页内容格式text/html,
那么需要添加一个字段的内容格式,代码如下:

//注意原有的三种格式也要加上
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil];

3>加上内容格式之后再次运行,报错如下:

AFN之使用问题解析_第5张图片
Snip20170429_10.png

错误意思: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";

报错如下:

AFN之使用问题解析_第6张图片
Snip20170429_12.png

添加内容格式:

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html",@"image/jpeg", nil];

到此我所要说的问题就说完了,如果大家有遇到其他的AFN报错问题,欢迎致电我的邮箱:[email protected]

Demo后期奉上,写的不好和有问题的地方希望大家积极指正,或者可以补全的地方可在下方评论

我是淘气的七禾,以上!

你可能感兴趣的:(AFN之使用问题解析)