第三方类AFNetworking
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网络监测
1 #import "ViewController.h" 2 // 网络请求的头文件 3 #import <AFNetworking.h> 4 @interface ViewController () 5 { 6 /// 进行网络监测判断的BOOL值 7 BOOL isOpen; 8 } 9 @end 10 11 @implementation ViewController 12 13 - (void)viewDidLoad { 14 [super viewDidLoad]; 15 16 } 17 18 #pragma mark - 实时监测当前网络状态 19 - (IBAction)networkMonitoringAction:(id)sender { 20 if (!isOpen) { 21 // 打开网络监测 22 [[AFNetworkReachabilityManager sharedManager] startMonitoring]; 23 isOpen = YES; 24 } else { 25 // 关闭网络监测 26 [[AFNetworkReachabilityManager sharedManager] stopMonitoring]; 27 isOpen = NO; 28 } 29 // 判断当前是wifi状态、3g、4g还是网络不可用状态 30 [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 31 /** 32 AFNetworkReachabilityStatusUnknown = -1, // 未知网络 33 AFNetworkReachabilityStatusNotReachable = 0, // 没有网络连接 34 AFNetworkReachabilityStatusReachableViaWWAN = 1, // 3g,4g 35 AFNetworkReachabilityStatusReachableViaWiFi = 2, // WIFI状态 36 */ 37 switch (status) { 38 case AFNetworkReachabilityStatusUnknown: 39 NSLog(@"当前网络处于未知状态"); 40 break; 41 case AFNetworkReachabilityStatusNotReachable: 42 NSLog(@"当前没有网络连接"); 43 break; 44 case AFNetworkReachabilityStatusReachableViaWiFi: 45 NSLog(@"当前处于WIFI状态"); 46 break; 47 case AFNetworkReachabilityStatusReachableViaWWAN: 48 NSLog(@"当前处于移动网络状态,请您注意您的流量"); 49 break; 50 default: 51 break; 52 } 53 }]; 54 55 }
2.2 Get、Post请求,网络加载时"菊花"的设置
1 #import "ViewController.h" 2 // 网络请求的头文件 3 #import <AFNetworking.h> 4 #import <AFNetworkActivityIndicatorManager.h> 5 @interface ViewController () 6 /// 用于网络请求的session对象 7 @property (nonatomic, strong) AFHTTPSessionManager *session; 8 9 @end 10 11 @implementation ViewController 12 13 - (void)viewDidLoad { 14 [super viewDidLoad]; 15 // 单例 初始化session对象 16 self.session = [AFHTTPSessionManager manager]; 17 // 设置请求返回支持的文件类型 18 self.session.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"application/x-json",@"text/html", nil]; 19 20 // 转圈圈的菊花默认是关闭的,需要手动打开,在网络慢的情况下请求数据时,手机左上角就会出现转圈圈的菊花 21 [AFNetworkActivityIndicatorManager sharedManager].enabled = YES; 22 } 23 24 #pragma mark - get网络请求 25 - (IBAction)getRequestAction:(id)sender { 26 /** 27 参数1:get请求的网址 28 参数2:拼接的参数,get请求不需要 29 参数3:当前进度,下载时常用,block传进来的参数downloadProgress就是下载进度 30 参数4:请求成功时调用的block,responseObject是请求到的数据 31 参数5:请求失败时调用的block 32 */ 33 [self.session GET:@"http://api.yhouse.com/m/city/dynmiclist" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) { 34 NSLog(@"下载进度"); 35 } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 36 // 打印请求到的数据 37 NSLog(@"请求成功%@", responseObject); 38 // 解析数据代码写在这里 39 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 40 NSLog(@"请求失败"); 41 }]; 42 } 43 #pragma mark - post网络请求(表单上传) 44 - (IBAction)postRequestAction:(id)sender { 45 // body体 46 /*{ 47 do = "pri_memberlist"; 48 "member_id" = zpHr2dsRvQQxYJxo2; 49 "workspace_id" = ILfYpE4Dhs2gWcuQx; 50 }*/ 51 52 /** 53 参数1:post请求的网址 54 参数2:拼接的body体 55 参数3:当前上传进度,block传进来的参数uploadProgress就是上传进度 56 参数4:请求成功时调用的block,responseObject是请求到的数据 57 参数5:请求失败时调用的block 58 */ 59 NSString *urlStr = @"http://m.taskwedo.com/API/wedo1/wedo.php"; 60 NSMutableDictionary *dataDic = [NSMutableDictionary dictionary]; 61 [dataDic setValue:@"pri_memberlist" forKey:@"do"]; 62 [dataDic setValue:@"zpHr2dsRvQQxYJxo2" forKey:@"member_id"]; 63 [dataDic setValue:@"ILfYpE4Dhs2gWcuQx" forKey:@"workspace_id"]; 64 65 [self.session POST:urlStr parameters:dataDic progress:^(NSProgress * _Nonnull uploadProgress) { 66 NSLog(@"上传进度"); 67 } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 68 NSLog(@"请求成功%@", responseObject); 69 // 解析数据代码写在这里 70 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 71 NSLog(@"请求失败"); 72 }]; 73 }