前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS检测是否有网络连接

iOS检测是否有网络连接

原创
作者头像
用户7705674
修改2021-10-29 14:12:34
1.5K0
修改2021-10-29 14:12:34
举报
文章被收录于专栏:css小迷妹css小迷妹

如果你的工程里面是用的AFNetworking请求网络数据的话,那么可以直接使用 AFNetworkReachabilityManager.h来判断网络状态!如果是用的ASI的话,里面自带的有Reachability.m和 Reachability.h这两个类,下面会分开介绍这两个的使用方法。

使用AF请求网络:

在AppDelegate.h里面添加类方法:

+ (void)netWorkStatus;//获取网络状态

在.m里面

代码语言:javascript
复制
#import "AppDelegate.h"
import "ViewController.h"
import "AFNetworkReachabilityManager.h"//af里面监听网络状态的类
import "FileManager.h"//单利模型,用来记录当前的网络状态
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions {
    ViewController view = [[ViewController alloc] init];
    UINavigationController nav = [[UINavigationController alloc] initWithRootViewController:view];
    self.window.rootViewController = nav;
    
    //调用网络状态
    [AppDelegate netWorkStatus];
    
    return YES;
}
+ (void)netWorkStatus
{
    /*
     AFNetworkReachabilityStatusUnknown          = -1,  // 未知
     AFNetworkReachabilityStatusNotReachable     = 0,   // 无连接
     AFNetworkReachabilityStatusReachableViaWWAN = 1,   // 3G 花钱
     AFNetworkReachabilityStatusReachableViaWiFi = 2,   // WiFi
     /
    
    // 如果要检测网络状态的变化,必须用检测管理器的单例的startMonitoring
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];
    
    // 检测网络连接的单例,网络变化时的回调方法
    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        
        //这是单利+模型,用来记录网络状态
        FileManager *maa = [FileManager shareFileManager];
        maa.netState = status;
        //        NSLog(@"-----网络状态----%ld---%d", status,maa.netState);
    }];
}</pre>
 创建一个.h文件命名为Singleton 
//
//  Singleton.h
//  SingletonModel
//
//  Created by 琳小兮 on 15/5/21.
//  Copyright (c) 2015年 琳小兮. All rights reserved.
//
//因为方法名 shared"ClassName"是连在一起的,为了让宏能够正确替换掉签名中的“ClassName”需要在前面加上 ##
//当宏的定义超过一行时,在末尾加上“\”表示下一行也在宏定义范围内。注意最后一行不需要加"\”。
//使用方法:(单利配合模型使用很方便)
//在.h里面(//公开的访问单利对象的方法singleton_interface(MyModel))
//在.m里面(singleton_implementation(MyModel))
define singleton_Interface(class)  + (class *)share##class;
define singleton_implemetntion(class)\
static class  instance = nil;\
+ (class )share##class\
{\
if (!instance) {\
instance = [[class alloc]init];\
}\
return instance;\
}\
+ (class )allocWithZone:(struct _NSZone )zone\
{\
static dispatch_once_t onece;\
dispatch_once(&onece, ^{\
instance = [super allocWithZone:zone];\
});\
return instance;\
}</pre>
 然后创建模型,命名为FileManager   
 在FileManager.h里面 
#import <Foundation/Foundation.h>
import "Singleton.h"
@interface FileManager :NSObject
singleton_Interface(FileManager)
@property (nonatomic,assign) int netState;
@end</pre>
 在FileManager.m里面 
#import "FileManager.h"
@implementation FileManager
singleton_implemetntion(FileManager)
@end</pre>
 
 
 如果是用的ASI的话: 
 在AppDelegate.h里面导入头文件: 
 #import "Reachability.h" 
 添加类方法: 
 +(BOOL) isConnectionAvailable;//判断是否有网络 
  
 在.m里面 
+(BOOL) isConnectionAvailable{
    
    BOOL isExistenceNetwork = YES;
    
    Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];
    
    NSParameterAssert([reach isKindOfClass:[Reachability class]]);
    
    NetworkStatus stats = [reach currentReachabilityStatus];
    if (stats == NotReachable)
        //没有网络
        isExistenceNetwork = NO;
    else if (stats == ReachableVia3G)
        isExistenceNetwork = YES;
    else if (stats == ReachableVia2G)
        isExistenceNetwork = YES;
    else if (stats == ReachableViaWiFi)
        isExistenceNetwork = YES;
    
    if (!isExistenceNetwork) {
        
        return NO;
    }
    
    return isExistenceNetwork;
}</pre>
 也可以用上面那种方式,利用单利+模型,来记录当前网络的具体状态!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档