一、AFNetworking的集成

目前使用人数最多的第三方网络库,没有之一。从开始的NSURLConnection到现在的NSURLSession,它都一直保持着与苹果的步调一致,而由它也衍生出大量的相关第三方网络功能库,不仅仅因为他的可靠,好用,一直保持着维护更新,也是为什么它这么受到广大程序员的青睐。

下面先来给我们的工程集成AFNetworking(这里用的是cocoaPods来管理和集成第三方类库,关于它的安装,CocoaPods的简介及安装和使用,):

然后按下“I”键进入编辑状态,粘贴刚才复制的pod语句:

粘贴完成后,按下“esc”键,退出编辑,再输入“:wq”,保存并退出Vim,这时就会发现项目根目录多了个podfile文件。

看到上面的提示,就表示安装完成了。下面我们就可以很爽的使用了(记住集成完成后,要重新打开项目,而且不要从原来的启动程序进入,选择后缀为.xcworkspace的程序打开)。

二、AFNetworking的使用

注意到咱们集成的版本为3.0.4。

下面的类已从AFNetworking 3.0中废弃:

  • AFURLConnectionOperation
  • AFHTTPRequestOperation
  • AFHTTPRequestOperationManager

以及很多修改,有兴趣的可以了解一下。

下面开始实践一下:

1.     // 请求的参数
2.     NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"20131129", @"date", @"1", @"startRecord", @"5", @"len", @"1234567890", @"udid", @"Iphone", @"terminalType", @"213", @"cid", nil];
3.     // 初始化Manager
4.     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
5. 
6.     // 不加上这句话,会报“Request failed: unacceptable content-type: text/plain”错误,因为我们要获取text/plain类型数据
7.     manager.responseSerializer = [AFHTTPResponseSerializer serializer];
8. 
9.     // post请求
10.     [manager POST:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?" parameters:dic constructingBodyWithBlock:^(id  _Nonnull formData) {
11.         // 拼接data到请求体,这个block的参数是遵守AFMultipartFormData协议的。
12. 
13.     } progress:^(NSProgress * _Nonnull uploadProgress) {
14.         // 这里可以获取到目前的数据请求的进度
15. 
16.     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
17. 
18.         // 请求成功,解析数据
19.         NSLog(@"%@", responseObject);
20. 
21.         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves error:nil];
22. 
23.         NSLog(@"%@", dic);
24. 
25.     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
26. 
27.         // 请求失败
28.         NSLog(@"%@", [error localizedDescription]);
29.     }];

如果是Get请求,相比Post请求,少了请求参数,然后只需将post方法改为get方法(也是直接将请求参数拼接在URL后面):

1.     // Get请求
2.     [manager GET:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
3.         // 这里可以获取到目前的数据请求的进度
4.     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
5.         // 请求成功,解析数据
6.         NSLog(@"%@", responseObject);
7.         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves error:nil];
8.  
9.         NSLog(@"%@", dic);
10.     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
11.         // 请求失败
12.         NSLog(@"%@", [error localizedDescription]);
13.     }];

 三、总结

在很多场合,比如我们需要当前网络请求,下载,上传的进度,使用AFNetworking可以省去很多麻烦,还有许多复杂的应用场合,相信它可以让你省事很多。