AFNetworking框架的使用和Cocoapods的安装使用
来源:互联网 发布:工具书网络出版总库 编辑:程序博客网 时间:2024/06/05 06:37
一 AFNetworking框架的使用
AFN框架的内部结构:
+ NSURLSession
1 >AFURLSessionManager
2 >AFHTTPSessionManager(封装了常用的 HTTP 方法)
—-GET;POST;UIKit + AFNetworking 分类;NSProgress :利用KVO
+ 半自动的序列化&反序列化的功能
AFURLRequestSerialization :请求的数据格式/默认是二进制的
AFURLResponseSerialization :响应的数据格式/默认是JSON格式
+ 附加功能
安全策略
—-HTTPS
—-AFSecurityPolicy
网络检测
—-对苹果的网络连接检测做了一个封装
—-AFNetworkReachabilityManager
1 发送请求GET和POST
代码块一:
#pragma mark - 登录(GET)- (void)get{ //创建管理者 AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager]; //创建字典 NSDictionary *dictM = @{ @"username":@"520it", @"pwd":@"520it", @"type":@"JSON", }; //发送请求(代码内部完成了OC转JSON) /* 第一个参数:请求路径(1.不包含参数 2.? 3. NSString) 第二个参数:字典 第三个参数:progress 进度 第四个参数:success 成功回调 task :请求任务 task.response responseObject:响应体信息(内部已经完成了序列化处理.JSON) 第五个参数:failure 失败的回调 error:错误信息 */ [sessionManager GET:@"http://120.25.226.186:32812/login" parameters:dictM progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"%@---%@",[responseObject class],responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"登录失败...."); }];}
代码块二:
#pragma mark - 登录(POST)- (void)post{ //创建管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //创建字典 NSDictionary *dict = @{ @"username":@"520it", @"pwd":@"520it", @"type":@"JSON", }; //创建task任务 [manager POST:@"http://120.25.226.186:32812/login" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"%@----%@",[responseObject class],responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { }];}
2 文件下载
需要注意的地方:在使用框架的方法中,方法内部会自动将文件剪切,但是需要我们手动创建一个文件夹,告诉系统将文件剪切到哪个地方.返回一个路径.
具体的代码:
#pragma mark - 下载- (void)download{ //创建会话管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //确定路径 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/videos/minion_10.mp4"]; //创建请求对象 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; //请求任务 /* 第一个参数:请求对象 第二个参数:进度回调 downloadProgress(获得进度信息) 第三个参数:destination targetPath:文件的临时存储路径 response:响应头信息 返回值:NSURL(AFN内部已经实现了文件剪切的过程,但是需要我们告诉他应该把文件剪切到哪里) 第四个参数:completionHandler 请求完成的时候调用 response:响应头信息 filePath==fullPath 文件的最终目录 error:错误信息 */ NSURLSessionDownloadTask *download = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { //totalUnitCount: 文件的总大小 //completedUnitCount: 当前下载的数据 //进度 NSLog(@"%f",1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount); } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { //告诉系统需要将文件剪切到哪个地方去 NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:response.suggestedFilename]; return [NSURL fileURLWithPath:fullPath]; } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { NSLog(@"下载完成"); }]; //执行任务 [download resume];}
3 文件上传
注意:需要我们高数系统上传的文件路径;将文件转成二进制数
- (void)upload1{ //创建会话管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //创建执行任务 //发送POST请求上传文件 /* 第一个参数:请求路径 NSString 第二个参数:非文件参数 第三个参数:constructingBodyWithBlock 用来拼接要上传的文件数据 第四个参数:progress进度回调 第五个参数:success 上传成功的回调 第六个参数:failure 失败后的回调 */ [manager POST:@"http://120.25.226.186:32812/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { //需要拼接上传的文件路径 //UIImage *image = [UIImage imageNamed:@"/Users/xiaofeng/Desktop/Snip20160323_1"]; //将图片转为二进制数据 //NSData *data = UIImagePNGRepresentation(image); //上传的二进制文件// [formData appendPartWithFileData:data name:@"file" fileName:@"XFJ-XFJ" mimeType:@"image/png"]; NSURL *fileUrl = [NSURL fileURLWithPath:@"/Users/xiaofeng/Desktop/Snip20160323_1.png"]; //上传二进制数据// [formData appendPartWithFileURL:fileUrl name:@"file" fileName:@"Snip20160323_1.png" mimeType:@"image/png" error:nil]; //简便方法 //该方法是简单版本,该方法内部会自动的得到文件的名称以及文件的类型 [formData appendPartWithFileURL:fileUrl name:@"file" error:nil]; } progress:^(NSProgress * _Nonnull uploadProgress) { //上传的进度 NSLog(@"%f",1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount); } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //打印响应体信息 NSLog(@"%@",responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //文件上传失败的时候调用 NSLog(@"上传失败....."); }];}
4 AFN的序列化和反序列化
代码块一:返回的数据是oc,因为代码内部已经做了json转oc字典的操作
#pragma mark - 反序列化//AFN内部默认已经做了(反)序列化处理(JSON)- (void)json{ //创建会话管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //创建字典 NSDictionary *dict = @{ @"type":@"JSON" }; //请求任务 /* 参数一:请求的地址 参数二:字典 参数三:精度 参数四:成功回调 参数五:失败回调 */ [manager GET:@"http://120.25.226.186:32812/video" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //打印出响应体信息 //内部已经把JOSN数据转换层OC对象(字典) NSLog(@"%@-----%@",[responseObject class],responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"请求失败..."); }];}
代码块二:需要手动将xml转为解析为oc(采用的是代理方法)
#pragma mark - 解析xml数据//返回的数据是xml,需要我们手动将xml转为oc- (void)xml{ //创建会话管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //修改响应体信息的解析方式 manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; //字典 NSDictionary *dict = @{ @"type":@"XML" }; //发送请求任务 [manager GET:@"http://120.25.226.186:32812/video" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //还需要自己手动将xml数据解析为oc字典 //解析 NSXMLParser *parser = (NSXMLParser *)responseObject; //设置代理 parser.delegate = self; //开始解析 [parser parse]; NSLog(@"%@",responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { }];}
代理方法:
#pragma mark - xml解析的代理数据- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{ NSLog(@"%@-----%@",elementName,attributeDict);}
代码块三:该种解析数据的方法,对数据不做任何的处理
#pragma mark - 这种解析处理将解析出来的数据不做任何的处理- (void)httpData{ //创建会话管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //修改数据的解析方式 manager.responseSerializer = [AFHTTPResponseSerializer serializer]; //请求任务 [manager GET:@"http://120.25.226.186:32812/resources/images/minion_02.png" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //打印解析信息// NSLog(@"%@-----%@",[responseObject class],responseObject); NSLog(@"%@",[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //解析失败回调 NSLog(@"解析失败..."); }];}
代码块四和代码块三差不多,也是不做任何的处理
- (void)httpData2{ //创建会话管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //修改数据的解析方式 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; //请求任务 [manager GET:@"http://www.baidu.com" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"%@",[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]); NSLog(@"%@",[responseObject class]); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"解析失败...."); }];}
5 通过AFN框架来监听网络状态的改变
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { switch (status) { case AFNetworkReachabilityStatusReachableViaWiFi: NSLog(@"wifi"); break; case AFNetworkReachabilityStatusReachableViaWWAN: NSLog(@"3G|4G"); break; case AFNetworkReachabilityStatusNotReachable: NSLog(@"没有网络"); break; case AFNetworkReachabilityStatusUnknown: NSLog(@"未知"); break; default: break; } }]; //开始监听网络状态改变 [[AFNetworkReachabilityManager sharedManager] startMonitoring];
二 Cocoapods的安装使用
1.先升级Gem(需要看你mac的版本,如果是10.11以上的就不需要升级)
sudo gem update –system
2.切换cocoapods的数据源
注意:【先删除,再添加,查看】
gem sources – remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
gem sources -l
3.安装cocoapods
sudo gem install cocoapods
或者(如10.11系统)sudo gem install -n /usr/local/bin cocoapods
4.将Podspec文件托管地址从github切换到国内的oschina(该步骤可以省略)
注意:【先删除,再添加,再更新】
—> pod repo remove master
—> pod repo add master http://git.oschina.net/akuandev/Specs.git
—> pod repo add master https://gitcafe.com/akuandev/Specs.git
—> pod repo update
5.设置pod仓库
—> pod setup
6.测试
注意:【如果有版本号,则说明已经安装成功】
—> pod –version
7.利用cocoapods来安装第三方框架
01 进入要安装框架的项目的.xcodeproj同级文件夹
02 在该文件夹中新建一个文件podfile
03 在文件中告诉cocoapods需要安装的框架信息
—-> a.该框架支持的平台
—-> b.适用的iOS版本
—-> c.框架的名称
—-> d.框架的版本
8.安装
—> pod install –no-repo-update
—> pod update –no-repo-update
9.说明
—> platform :ios, ‘8.0’ 用来设置所有第三方库所支持的iOS最低版本
—> pod ‘SDWebImage’,’~>2.6’ 设置框架的名称和版本号
注意:版本号的规则:
—-> ‘>1.0’ 可以安装任何高于1.0的版本
—-> ‘>=1.0’ 可以安装任何高于或等于1.0的版本
—-> ‘<1.0’ 任何低于1.0的版本
—-> ‘<=1.0’ 任何低于或等于1.0的版本
—-> ‘~>0.1’ 任何高于或等于0.1的版本,但是不包含高于1.0的版本
—-> ‘~>0’ 任何版本,相当于不指定版本,默认采用最新版本号
10.使用pod install命令安装框架后的大致过程:
01 分析依赖:该步骤会分析Podfile,查看不同类库之间的依赖情况。如果有多个类库依赖于同一个类库,但是依赖于不同的版本,那么cocoaPods会自动设置一个兼容的版本。
02 下载依赖:根据分析依赖的结果,下载指定版本的类库到本地项目中。
03 生成Pods项目:创建一个Pods项目专门用来编译和管理第三方框架,CocoaPods会将所需的框架,库等内容添加到项目中,并且进行相应的配置。
04 整合Pods项目:将Pods和项目整合到一个工作空间中,并且设置文件链接。
1 0
- AFNetworking框架的使用和Cocoapods的安装使用
- AFNetworking框架的使用
- 安装CocoaPods以及使用CocoaPods安装AFNetworking
- CocoaPods的安装和使用
- cocoapods的安装和使用
- Cocoapods的安装和使用
- cocoapods的安装和使用
- cocoapods 的安装和使用
- cocoaPods的安装和使用
- CocoaPods的安装和使用
- cocoaPods 的安装和使用
- cocoaPods的安装和使用
- CocoaPods的安装和使用
- cocoaPods的安装和使用
- Cocoapods的安装和使用
- CocoaPods的安装和使用
- CocoaPods的安装和使用
- CocoaPods的安装和使用
- 动画—Core Animation初步学习三:关键帧动画
- 数据结构之向量
- 抽奖
- 安卓应用反编译(一)-APK包的结构
- Python 适合用于做什么
- AFNetworking框架的使用和Cocoapods的安装使用
- Inventor API: 如何在工程图里显示装配不同详细等级(LOD)的重量
- 线性表之顺序表
- 18. 4Sum
- 漫谈递归:递归的思想
- 装饰模式
- CCF201312真题及题解(能力有限,欢迎交流)
- sql执行过程
- 关于LCD的分屏与切屏 Tearing effect