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(@"请求失败");
}];
}
05-06 11:27