iOS 检测网络状态的两种方法

2025-05-29 0 20

一般有两种方式,都是第三方的框架,轮子嘛,能用就先用着,后面再优化。

一:Reachability

1.首先在AppDelegate.h添加头文件"Reachability.h",导入框架SystemConfiguration.frame。

2. 在AppDelegate.m中这样实现:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

//开启网络状况的监听

//来订阅实时的网络状态变化通知。导入Reachability.h头文件,然后注册一个对象来订阅网络状态变化的信息,网络状态变化的信息名称为kReachabilityChanged-Notification

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];

//通过检查某个主机能否访问来判断当前网络是否可用:

self.hostReach = [Reachability reachabilityWithHostName:@"www.baidu.com"] ;

//开始监听,会启动一个run loop

[self.hostReach startNotifier];

}

-(void)reachabilityChanged:(NSNotification *)note{

Reachability *currReach = [note object];

NSParameterAssert([currReach isKindOfClass:[Reachability class]]);

//对连接改变做出响应处理动作

NetworkStatus status = [currReach currentReachabilityStatus];

//如果没有连接到网络就弹出提醒实况

self.isReachable = YES;

if(status == NotReachable){

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"网络连接异常" message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];

[alert show];

[alert release];

self.isReachable = NO;

return;

}

if (status==kReachableViaWiFi||status==kReachableViaWWAN) {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"网络连接信息" message:@"网络连接正常" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];

// [alert show];

[alert release];

self.isReachable = YES;

}

}

然后在每个页面的viewWillAppear:加上:

?

1

2

3

4

5

6

7

8

9

10

11

12

13
-(void)viewWillAppear:(BOOL)animated{

[super viewWillAppear:YES];

AppDelegate *appDlg = (AppDelegate *)[[UIApplication sharedApplication] delegate];

if(appDlg.isReachable){

NSLog(@"网络已连接");//执行网络正常时的代码

}

else{

NSLog(@"网络连接异常");//执行网络异常时的代码

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"网络连接异常" message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];

[alert show];

[alert release];

}

}

这样就可以检查到在运行程序时网络突然的中断和连接。Reachability类实际上是苹果公司对SCNetworkReachability API的封装,这个API定义在SystemConfigure.framework库中。如果有其他特别的需求,也可以直接使用这个原生的SCNetworkReachability类。

二:AFNetworking监测

1.导入框架,和头文件#import <AFNetworkReachabilityManager.h>

2.代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31
-(void)afn{

//1.创建网络状态监测管理者

AFNetworkReachabilityManager *manger = [AFNetworkReachabilityManager sharedManager];

//开启监听,记得开启,不然不走block

[manger startMonitoring];

//2.监听改变

[manger setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

/*

AFNetworkReachabilityStatusUnknown = -1,

AFNetworkReachabilityStatusNotReachable = 0,

AFNetworkReachabilityStatusReachableViaWWAN = 1,

AFNetworkReachabilityStatusReachableViaWiFi = 2,

*/

switch (status) {

case AFNetworkReachabilityStatusUnknown:

NSLog(@"未知");

break;

case AFNetworkReachabilityStatusNotReachable:

NSLog(@"没有网络");

break;

case AFNetworkReachabilityStatusReachableViaWWAN:

NSLog(@"3G|4G");

break;

case AFNetworkReachabilityStatusReachableViaWiFi:

NSLog(@"WiFi");

break;

default:

break;

}

}];

}

以上所述是小编给大家介绍的iOS 检测网络状态的两种方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对快网idc网站的支持!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 iOS 检测网络状态的两种方法 https://www.kuaiidc.com/91932.html

相关文章

发表评论
暂无评论