一、AFNetworking的集成
目前使用人数最多的第三方网络库,没有之一。从开始的NSURLConnection到现在的NSURLSession,它都一直保持着与苹果的步调一致,而由它也衍生出大量的相关第三方网络功能库,不仅仅因为他的可靠,好用,一直保持着维护更新,也是为什么它这么受到广大程序员的青睐。
下面先来给我们的工程集成AFNetworking(这里用的是cocoaPods来管理和集成第三方类库,关于它的安装,CocoaPods的简介及安装和使用,):
然后按下“I”键进入编辑状态,粘贴刚才复制的pod语句:
粘贴完成后,按下“esc”键,退出编辑,再输入“:wq”,保存并退出Vim,这时就会发现项目根目录多了个podfile文件。
看到上面的提示,就表示安装完成了。下面我们就可以很爽的使用了(记住集成完成后,要重新打开项目,而且不要从原来的启动程序进入,选择后缀为.xcworkspace的程序打开)。
注意到咱们集成的版本为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可以省去很多麻烦,还有许多复杂的应用场合,相信它可以让你省事很多。