第三方类AFNetworking
2016-05-27 21:05
363 查看
1、AFNetworking简介
AFNetworking是一个在iOS开发中使用非常多的轻量级网络开源库适用于iOS以及Mac OS X。它构建于在(Apple iOS开发文档) NSURLConnection , NSOperation , 以及其他熟悉的Foundation技术之上。
它拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松。
官方链接http://cocoadocs.org/docsets/AFNetworking/1.3.0/
2、AFNetworking使用(使用CocoaPods管理)
2.1网络监测
#import "ViewController.h" // 网络请求的头文件 #import <AFNetworking.h> @interface ViewController () { /// 进行网络监测判断的BOOL值 BOOL isOpen; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; } #pragma mark - 实时监测当前网络状态 - (IBAction)networkMonitoringAction:(id)sender { if (!isOpen) { // 打开网络监测 [[AFNetworkReachabilityManager sharedManager] startMonitoring]; isOpen = YES; } else { // 关闭网络监测 [[AFNetworkReachabilityManager sharedManager] stopMonitoring]; isOpen = NO; } // 判断当前是wifi状态、3g、4g还是网络不可用状态 [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { /** AFNetworkReachabilityStatusUnknown = -1, // 未知网络 AFNetworkReachabilityStatusNotReachable = 0, // 没有网络连接 AFNetworkReachabilityStatusReachableViaWWAN = 1, // 3g,4g AFNetworkReachabilityStatusReachableViaWiFi = 2, // WIFI状态 */ switch (status) { case AFNetworkReachabilityStatusUnknown: NSLog(@"当前网络处于未知状态"); break; case AFNetworkReachabilityStatusNotReachable: NSLog(@"当前没有网络连接"); break; case AFNetworkReachabilityStatusReachableViaWiFi: NSLog(@"当前处于WIFI状态"); break; case AFNetworkReachabilityStatusReachableViaWWAN: NSLog(@"当前处于移动网络状态,请您注意您的流量"); break; default: break; } }]; }
2.2 Get、Post请求,网络加载时"菊花"的设置
#import "ViewController.h" // 网络请求的头文件 #import <AFNetworking.h> #import <AFNetworkActivityIndicatorManager.h> @interface ViewController () /// 用于网络请求的session对象 @property (nonatomic, strong) AFHTTPSessionManager *session; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 单例 初始化session对象 self.session = [AFHTTPSessionManager manager]; // 设置请求返回支持的文件类型 self.session.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"application/x-json",@"text/html", nil]; // 转圈圈的菊花默认是关闭的,需要手动打开,在网络慢的情况下请求数据时,手机左上角就会出现转圈圈的菊花 [AFNetworkActivityIndicatorManager sharedManager].enabled = YES; } #pragma mark - get网络请求 - (IBAction)getRequestAction:(id)sender { /** 参数1:get请求的网址 参数2:拼接的参数,get请求不需要 参数3:当前进度,下载时常用,block传进来的参数downloadProgress就是下载进度 参数4:请求成功时调用的block,responseObject是请求到的数据 参数5:请求失败时调用的block */ [self.session GET:@"http://api.yhouse.com/m/city/dynmiclist" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) { NSLog(@"下载进度"); } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { // 打印请求到的数据 NSLog(@"请求成功%@", responseObject); // 解析数据代码写在这里 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"请求失败"); }]; } #pragma mark - post网络请求(表单上传) - (IBAction)postRequestAction:(id)sender { // body体 /*{ do = "pri_memberlist"; "member_id" = zpHr2dsRvQQxYJxo2; "workspace_id" = ILfYpE4Dhs2gWcuQx; }*/ /** 参数1:post请求的网址 参数2:拼接的body体 参数3:当前上传进度,block传进来的参数uploadProgress就是上传进度 参数4:请求成功时调用的block,responseObject是请求到的数据 参数5:请求失败时调用的block */ NSString *urlStr = @"http://m.taskwedo.com/API/wedo1/wedo.php"; NSMutableDictionary *dataDic = [NSMutableDictionary dictionary]; [dataDic setValue:@"pri_memberlist" forKey:@"do"]; [dataDic setValue:@"zpHr2dsRvQQxYJxo2" forKey:@"member_id"]; [dataDic setValue:@"ILfYpE4Dhs2gWcuQx" forKey:@"workspace_id"]; [self.session POST:urlStr parameters:dataDic progress:^(NSProgress * _Nonnull uploadProgress) { NSLog(@"上传进度"); } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"请求成功%@", responseObject); // 解析数据代码写在这里 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"请求失败"); }]; }
相关文章推荐
- 图像和视觉相关的一些常用的代码和学习资源
- java读取大文件 超大文件的几种方法
- bash 读取行
- 有道字典主窗口初始化失败、暴风影音停止工作的诡异问题
- Aptana studio 3 自定义编码颜色
- [置顶] Markdown使用的数学符号和其他东西
- vertica-console
- 第13周项目-分数中的运算符重载
- 软件工程---阅读《构建之法》第8、9、10章读后感
- 1013. 数素数 (20)
- onmouseover 事件缩略图片滑动 修正版
- 第10章-基于树的方法(3)-树的改进-集成方法
- 缩略图实现思路
- poj 1015 Jury Compromise
- linux下的简单文件读写锁的操作
- 排序算法之插入排序
- 关于easyui grid中的load,reload,loadData区别
- Win7主机安装VMWare虚拟机配置,使得主机与虚拟机之间互通且虚拟机正常上网
- Android AsyncTask介绍
- Learning OpenCV: cvPyrDown and display video