美文网首页
AFNetworking的简单解析

AFNetworking的简单解析

作者: 赵亦晨 | 来源:发表于2016-09-28 10:11 被阅读0次

    一、AFNetworking的集成

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

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

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

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

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

    二、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的简单解析

          本文链接:https://www.haomeiwen.com/subject/tynddttx.html