iOS开发之AFNetworking 3.0使用

2024-02-26 07:32

本文主要是介绍iOS开发之AFNetworking 3.0使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

昨天使用Cocoapods导入AFN做POST的时候,导入的最新版的3.0.4,突然发现找不到AFHTTPRequestOperationManager了。。。上github上一看,发现没有这个了。刚开始以为是cocoapods没有给我导进去,因为是小demo,就想自己写一个网络请求的,发现也没有这NSURLConnection了,被弃用了,突然意识到,这个就是AFHTTPRequestOperationManager找不到的原因了,它是基于NSURLConnection封装的!!于是找了一下,现在都用的是NSURLSession了,AFN中用的是AFHTTPSessionManager了~~

特地记录下来,以便遇到这个的朋友们看看!

ps:如果想用以前的话,cocoapods 就不要用最新的版本了,2.6的上面有。


GET请求


AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager GET:URL parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {  }     success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {  NSLog(@"这里打印请求成功要做的事");  }failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull   error) {  NSLog(@"%@",error);  //这里打印错误信息}];

POST 请求


AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];NSMutableDictionary *parameters = @{@"":@"",@"":@""};[manager POST:URL parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {}];

暂时用的比较多的就这两个,用到其他的 再来更新!!

最近又用到了下载,索性 上传下载都研究了一下 ,补充进来

补充试用AFN3.0下载方法

/***  AFN3.0 下载*/
- (void)downLoad{//1.创建管理者对象AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//2.确定请求的URL地址NSURL *url = [NSURL URLWithString:@""];//3.创建请求对象NSURLRequest *request = [NSURLRequest requestWithURL:url];//下载任务NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {//打印下下载进度WKNSLog(@"%lf",1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {//下载地址WKNSLog(@"默认下载地址:%@",targetPath);//设置下载路径,通过沙盒获取缓存地址,最后返回NSURL对象NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];return [NSURL URLWithString:filePath];} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {//下载完成调用的方法WKNSLog(@"下载完成:");WKNSLog(@"%@--%@",response,filePath);}];//开始启动任务[task resume];}

AFN3.0 上传

/***  AFN 3.0 上传*      有两种方式*          upLoad1 和 upLoad2*///第一种方法是通过工程中的文件进行上传
- (void)upLoad1{//1。创建管理者对象AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//2.上传文件NSDictionary *dict = @{@"username":@"1234"};NSString *urlString = @"22222";[manager POST:urlString parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {//上传文件参数UIImage *iamge = [UIImage imageNamed:@"123.png"];NSData *data = UIImagePNGRepresentation(iamge);//这个就是参数[formData appendPartWithFileData:data name:@"file" fileName:@"123.png" mimeType:@"image/png"];} progress:^(NSProgress * _Nonnull uploadProgress) {//打印下上传进度WKNSLog(@"%lf",1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {//请求成功WKNSLog(@"请求成功:%@",responseObject);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {//请求失败WKNSLog(@"请求失败:%@",error);}];}//第二种是通过URL来获取路径,进入沙盒或者系统相册等等
- (void)upLoda2{//1.创建管理者对象AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//2.上传文件NSDictionary *dict = @{@"username":@"1234"};NSString *urlString = @"22222";[manager POST:urlString parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {[formData appendPartWithFileURL:[NSURL fileURLWithPath:@"文件地址"] name:@"file" fileName:@"1234.png" mimeType:@"application/octet-stream" error:nil];} progress:^(NSProgress * _Nonnull uploadProgress) {//打印下上传进度WKNSLog(@"%lf",1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {//请求成功WKNSLog(@"请求成功:%@",responseObject);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {//请求失败WKNSLog(@"请求失败:%@",error);}];
}

监测当前网络状态(网络监听)

- (void)AFNetworkStatus{//1.创建网络监测者AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];/*枚举里面四个状态  分别对应 未知 无网络 数据 WiFitypedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {AFNetworkReachabilityStatusUnknown          = -1,      未知AFNetworkReachabilityStatusNotReachable     = 0,       无网络AFNetworkReachabilityStatusReachableViaWWAN = 1,       蜂窝数据网络AFNetworkReachabilityStatusReachableViaWiFi = 2,       WiFi};*/[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {//这里是监测到网络改变的block  可以写成switch方便//在里面可以随便写事件switch (status) {case AFNetworkReachabilityStatusUnknown:WKNSLog(@"未知网络状态");break;case AFNetworkReachabilityStatusNotReachable:WKNSLog(@"无网络");break;case AFNetworkReachabilityStatusReachableViaWWAN:WKNSLog(@"蜂窝数据网");break;case AFNetworkReachabilityStatusReachableViaWiFi:WKNSLog(@"WiFi网络");break;default:break;}}] ;
}

有知道新版本用法的各位大神请不吝赐教,小白再次拜谢了!!

在使用的过程中遇到了一些问题的 总结,在这里,有需要的亲们可以去看一下,就不往这里放了,占地方。。。。


文/WK_IOSDevelpoer(简书作者)
原文链接:http://www.jianshu.com/p/11bb0d4dc649
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

这篇关于iOS开发之AFNetworking 3.0使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/748098

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版