AFNetworking的简单解析

一、AFNetworking的集成

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

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

AFNetworking的简单解析_第1张图片

AFNetworking的简单解析_第2张图片

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

AFNetworking的简单解析_第3张图片

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

AFNetworking的简单解析_第4张图片

AFNetworking的简单解析_第5张图片

AFNetworking的简单解析_第6张图片

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

AFNetworking的简单解析_第7张图片

二、AFNetworking的使用

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

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

AFURLConnectionOperation

AFHTTPRequestOperation

AFHTTPRequestOperationManager

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

下面开始实践一下:

// 请求的参数

NSDictionary*dic=[NSDictionarydictionaryWithObjectsAndKeys:@"20131129",@"date",@"1",@"startRecord",@"5",@"len",@"1234567890",@"udid",@"Iphone",@"terminalType",@"213",@"cid",nil];

// 初始化Manager

AFHTTPSessionManager*manager=[AFHTTPSessionManagermanager];

// 不加上这句话,会报“Request failed: unacceptable content-type: text/plain”错误,因为我们要获取text/plain类型数据

manager.responseSerializer=[AFHTTPResponseSerializerserializer];

// post请求

[manager POST:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?"parameters:dic constructingBodyWithBlock:^(id_NonnullformData){

// 拼接data到请求体,这个block的参数是遵守AFMultipartFormData协议的。

}progress:^(NSProgress*_NonnulluploadProgress){

// 这里可以获取到目前的数据请求的进度

}success:^(NSURLSessionDataTask*_Nonnulltask,id_NullableresponseObject){

// 请求成功,解析数据

NSLog(@"%@",responseObject);

NSDictionary*dic=[NSJSONSerializationJSONObjectWithData:responseObject options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaveserror:nil];

NSLog(@"%@",dic);

}failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror){

// 请求失败

NSLog(@"%@",[error localizedDescription]);

}];

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

// Get请求

[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:nilprogress:^(NSProgress*_NonnulldownloadProgress){

// 这里可以获取到目前的数据请求的进度

}success:^(NSURLSessionDataTask*_Nonnulltask,id_NullableresponseObject){

// 请求成功,解析数据

NSLog(@"%@",responseObject);

NSDictionary*dic=[NSJSONSerializationJSONObjectWithData:responseObject options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaveserror:nil];

NSLog(@"%@",dic);

}failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror){

// 请求失败

NSLog(@"%@",[error localizedDescription]);

}];

三、总结

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

你可能感兴趣的:(AFNetworking的简单解析)