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(@"请求失败");
}];
}

第三方类AFNetworking的更多相关文章

  1. tp框架之分页与第三方类的应用

    1.先把分页类放在根目录下,比如放在某个模块下 2.在类里面写入命名空间,注意类名的格式(类名要与里面的方法名一致) 3.在需要的方法里面按照路径进行实例化,然后就可以使用了 方法: public f ...

  2. ajax的使用:(ajaxReturn[ajax的返回方法]),(eval返回字符串);分页;第三方类(page.class.php)如何载入;自动加载函数库(functions);session如何防止跳过登录访问(构造函数说明)

    一.ajax例子:ajaxReturn("ok","eval")->thinkphp中ajax的返回值的方法,返回参数为ok,返回类型为eval(字符串) ...

  3. ThinkPHP讲解(十)——第三方类的引入:以分页为主

    第三方类的引入,以分页类为例: 1.在控制器里新建一个分页的操作方法FenYe() 注意:第三方类Page.class.php放在Think或Home文件夹下,并新近一个文件夹,放在里面,并在其类里加 ...

  4. Thinkphp 零散知识点(caa/js路径,引入第三方类,ajax返回,session/cookie)

    一.关于JS和CSS路径问题 1.找路径是从入口文件index.php来找的,而不是从文件本身所在位置来找, 因为我们访问时是访问的入口文件 2.在存放JS和CSS的时候可以放到public文件夹下 ...

  5. TP框架 命名空间 与第三方类

    命名空间 相当于虚拟目录 所有类文件都放在虚拟目录 功能:实现自动加载类 TP框架的命名空间要更复杂 内容=> 命名空间中定义和使用 都用\1初始命名空间 相当于 根目录 如:Library文件 ...

  6. tp5引用第三方类vendor或extend(多种方法)

    extend 方法一:命名空间引入 我们只需要把自己的类库包目录放入EXTEND_PATH目录(默认为extend,可配置),就可以自动注册对应的命名空间,例如: 我们在extend目录下面新增一个l ...

  7. 第三方库AFNetworking 3.1.0的简单使用

    AFNetworking是一个 在iOS开发中 使用非常多网络开源库.它是一个轻量级的网络请求API类库. 适用于iOS以及Mac OS X.它构建于在(Apple iOS开发文档) NSURLCon ...

  8. laravel 5.2 引入第三方类

    composer 安装类依赖包 很受用 也很方便 但是要是一个有一定规模的公司技术团队 因为要照顾大局 还是引入类好些 下面是引入类的方法 1.首先在app目录下创建一个新的文件夹,命名Tools(可 ...

  9. 基于MFC与第三方类CWebPage的百度地图API开发范例

    在进行百度地图API开发之前你需要到http://developer.baidu.com/map申请密匙 密匙申请之后就可以进行百度地图API的开发了. 下面我们以在visual c++6.0里进行地 ...

随机推荐

  1. 最大流 Dinic + Sap 模板

    不说别的,直接上模板. Dinic+当前弧优化: struct Edge{ int x,y,c,ne; }e[M*]; int be[N],all; int d[N],q[N]; int stack[ ...

  2. BZOJ2226: [Spoj 5971] LCMSum

    题解: 考虑枚举gcd,然后问题转化为求<=n且与n互质的数的和. 这是有公式的f[i]=phi[i]*i/2 然后卡一卡时就可以过了. 代码: #include<cstdio> # ...

  3. Android设置布局背景为白色的三种方法

    一.在xml文件里可以直接设置: android:background="#ffffff" 其他颜色可以看这里;http://blog.csdn.net/yanzi1225627/ ...

  4. 《分销系统-原创第一章》之“多用户角色权限访问模块问题”的解决思路( 位运算 + ActionFilterAttribute )

    此项目需求就是根据给用户分配的权限,进行相应的权限模块浏览功能,因为项目不是很大,所以权限没有去用一张表去存,我的解决思路如下,希望大家给点建议. 数据库用户表结构如下: 数据库表梳理: BankUs ...

  5. Java [Leetcode 168]Excel Sheet Column Title

    题目描述: Given a positive integer, return its corresponding column title as appear in an Excel sheet. F ...

  6. Java [Leetcode 202]Happy Number

    题目描述: Write an algorithm to determine if a number is "happy". A happy number is a number d ...

  7. 【转】linux中wait与waitpid的差别

    原文网址:http://blog.163.com/libo_5/blog/static/15696852010324287748/ zombie不占用内存也不占用CPU,表面上我们可以不用在乎它们的存 ...

  8. Android UncaughtExceptionHandler,捕获错误

    最近在做个项目,需要在程序出现运行时异常和错误导致程序crash时进行一些操作,找到一个方法 Thread.setDefaultUncaughtExceptionHandler(new Uncaugh ...

  9. 向Oracle中插入记录时,出现“Oracle.DataAccess.Client.OracleException ORA-00933 ”错误

    错误信息的弹出框

  10. 【LeetCode 201】Bitwise AND of Numbers Range

    Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers ...