// 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裏面爲網絡請求內容