用AFN做网络判断

//创建一个基于AFHTTPSessionManager 的类


#import <Foundation/Foundation>

#import "AFHTTPSessionManager.h"

@interfaceAFAppDotNetAPIClient :AFHTTPSessionManager

//创建单例,在需要网络判断的地方调用

+ (instancetype)sharedClient;

@end


#import"AFAppDotNetAPIClient.h"

//全局静态变量 是测试网络用到的网址

static NSString*const AFAppDotNetAPIBaseURLString =@"https://api.app.net/";

@implementationAFAppDotNetAPIClient

//实现单例方法

+ (instancetype)sharedClient {

staticAFAppDotNetAPIClient*_sharedClient =nil;

//用dispatch_once 函数 解决线程问题 防止多线程时被不同线程同时调用  类似加锁的功能

staticdispatch_once_tonceToken;

dispatch_once(&onceToken, ^{

_sharedClient = [[AFAppDotNetAPIClientalloc]initWithBaseURL:[NSURLURLWithString:AFAppDotNetAPIBaseURLString]];

_sharedClient.securityPolicy= [AFSecurityPolicypolicyWithPinningMode:AFSSLPinningModeNone];

//网络判断的内部实现        [_sharedClient.reachabilityManagersetReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatusstatus) {

switch(status) {

caseAFNetworkReachabilityStatusReachableViaWWAN:

NSLog(@"-------AFNetworkReachabilityStatusReachableViaWWAN------");

break;

caseAFNetworkReachabilityStatusReachableViaWiFi:

NSLog(@"-------AFNetworkReachabilityStatusReachableViaWiFi------");

break;

caseAFNetworkReachabilityStatusNotReachable:

NSLog(@"-------AFNetworkReachabilityStatusNotReachable------");

break;

default:

break;

}

}];

[_sharedClient.reachabilityManagerstartMonitoring];

});

return_sharedClient;

}

//用if判断网络状态 增加了自动提示---提示框

if(status ==

AFNetworkReachabilityStatusReachableViaWWAN) {

UIAlertView*alertView = [[UIAlertViewalloc]initWithTitle:@"温馨提示"message:@"目前3G网络状态良好"delegate:selfcancelButtonTitle:nilotherButtonTitles:nil,nil];

[alertViewshow];

alertView.cancelButtonIndex=1;

//让alertView自动取消这里的self是指shareClient

[selfperformSelector:@selector(dissAlertView:)withObject:alertViewafterDelay:1.0];

//WiFi

}elseif(status ==AFNetworkReachabilityStatusReachableViaWiFi){

UIAlertView*alertView = [[UIAlertViewalloc]initWithTitle:@"温馨提示"message:@"目前是WiFi网络"delegate:selfcancelButtonTitle:nil

otherButtonTitles:nil,nil];

[alertViewshow];

//让alertView自动取消

[selfperformSelector:@selector(dissAlertView:)withObject:alertViewafterDelay:1.0];

//无网络

}elseif(status ==AFNetworkReachabilityStatusNotReachable){

UIAlertView*alertView = [[UIAlertViewalloc]initWithTitle:@"温馨提示"message:@"无法找到网络"delegate:selfcancelButtonTitle:nilotherButtonTitles:nil,nil];

[alertViewshow];

[selfperformSelector:@selector(dissAlertView:)withObject:alertViewafterDelay:1.0];

}

}];

[shareClient.reachabilityManagerstartMonitoring];

});

returnshareClient;

}

//在单例里面 这个方法必须写为加号方法

因为在上面的网络判断中 我们在return 前就调用了这个方法,而调用时实例还没有产生,所以用减号方法会崩溃的 ;

//alertView自动消失的实现方法

+ (void)dissAlertView:(UIAlertView*)alertView

{

if(alertView) {

[alertViewdismissWithClickedButtonIndex:[alertViewcancelButtonIndex]animated:YES];

}

[alertViewrelease];

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,773评论 2 7
  • 网络请求的思路:如果请求成功的话AFN的responseObject就是解析好的。1发送网络请求;get/post...
    丘昌彬今为蝼蚁阅读 1,968评论 0 0
  • 用法: 先添加指针视图,转盘背景和开始按钮。按钮的点击事件里设置开始动画,在动画开始的代理方法中让开始按钮不响应点...
    全栈的猫南北阅读 1,661评论 1 3
  • 走在陌生的城市,脚下踩着鞭炮炸后的纸屑,全世界都被红色添涂,琳琅满目。人人口中吐着吉祥的字眼,眼角挂着只属于这个...
    简謬阅读 248评论 1 0
  • 读书与上学无关,那是另一码事:读——在校园以外,书——在课本以外,读书来自生命中某种神秘的动力,与现实利益无关。而...
    绣衣夜行阅读 225评论 0 0