// AFN诊断网络的封装实现
JWTestNetStateTool.h
#import <Foundation/Foundation.h>
typedef void(^HaveNetBlock)();
@interface JWTestNetStateTool : NSObject
+ (void)testCurrentNetState:(UIViewController *)vc
HaveNetBlock:(HaveNetBlock)block;
@end
JWTestNetStateTool.m
#import "JWTestNetStateTool.h"
#import "AFNetworking.h" //导入AFN三方框架
@implementation JWTestNetStateTool
+ (void)testCurrentNetState:(UIViewController *)viewController
HaveNetBlock:(HaveNetBlock)block
{
// 无网络时弹出弹框提醒用户当前无网
UIAlertAction *action = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
}];
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"警告!" message:@"网络连接失败" preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:action];
// 开始监测网络状态
[[AFNetworkReachabilityManager sharedManager]startMonitoring];
// 创建block匿名函数之前一般需要对self进行weak化,否则造成循环引用无法释放controller:
__weak typeof(viewController) weakSelf = viewController;
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status)
{
case AFNetworkReachabilityStatusUnknown:
// 回调处理
break;
case AFNetworkReachabilityStatusNotReachable:
[weakSelf presentViewController:alert animated:YES completion:^{
}];
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
block();
break;
}
}];
}
@end
// ViewController里使用
导入头文件
[JWTestNetStateTool testCurrentNetState:self HaveNetBlock:^{
}];
UIViewController位置为 self
block里面为网络请求内容