zoukankan      html  css  js  c++  java
  • AFNetwork监听网络失效

    监听网络状态大家都不陌生,尤其是使用AFNetwork监听,

    我的思路是对AFNetwork进行二次封装,然后直接以属性的形式输出结果

    #pragma mark - 属性
    /// 网络状态
    @property (nonatomic, assign, readonly) NetworkState state;
    @interface NetworkStateTool ()
    @property (nonatomic, assign, readwrite) NetworkState state;
    @end
    #pragma mark -- 开启网络监听
    - (void)startNetworkStateMonitoring {
        
        AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
        //开启网络监听
        [mgr startMonitoring];
        
        [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            switch (status) {
                case AFNetworkReachabilityStatusUnknown: // 未知网络
                    NSLog(@"未知网络");
                    self.state = NetworkStateUnknown;
                    break;
                    
                case AFNetworkReachabilityStatusNotReachable: // 没有网络(断网)
                    NSLog(@"没有网络");
                    self.state = NetworkStateNone;
                    break;
                    
                case AFNetworkReachabilityStatusReachableViaWWAN: // 手机自带网络
                    NSLog(@"手机自带网络");
                    self.state = NetworkStateWWAN;
                    break;
                    
                case AFNetworkReachabilityStatusReachableViaWiFi: // WIFI
                    NSLog(@"WIFI");
                    self.state = NetworkStateWiFi;
                    break;
            }
        }];
        
    }

    按照官方的说法,我们只需要调用一次startNetworkStateMonitoring方法,

    即只需要调用startMonitoring方法一次,即可在setReachabilityStatusChangeBlock中收到实时结果

    实测:

    WIFI--->断网 可以实时监测

    但是

    断网--->WIFI 无法实时监测,即setReachabilityStatusChangeBlock中收不到结果

    只有重新调用setReachabilityStatusChangeBlock方法,才可以拿到实时结果

    故修改代码如下:直接通过方法获取

    + (NetworkState)networkState {
        NetworkState __block state;
        AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
        [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            switch (status) {
                case AFNetworkReachabilityStatusUnknown: // 未知网络
                    NSLog(@"未知网络");
                    state = NetworkStateUnknown;
                    break;
                    
                case AFNetworkReachabilityStatusNotReachable: // 没有网络(断网)
                    NSLog(@"没有网络");
                    state = NetworkStateNone;
                    break;
                    
                case AFNetworkReachabilityStatusReachableViaWWAN: // 手机自带网络
                    NSLog(@"手机自带网络");
                    state = NetworkStateWWAN;
                    break;
                    
                case AFNetworkReachabilityStatusReachableViaWiFi: // WIFI
                    NSLog(@"WIFI");
                    state = NetworkStateWiFi;
                    break;
            }
        }];
        
        //开启网络监听
        [mgr startMonitoring];
        
        return state;
    }
  • 相关阅读:
    python 默认编码( UnicodeDecodeError: 'ascii' codec can't decode)
    python发送各类邮件的主要方法
    python输出htmltestrunner中文乱码如何解决
    Python unittest 官方文档
    Python pip 安装包
    Python easy_insatll 安装包
    linux 解压操作命令
    vim 操作指令2
    vim 操作指令1
    (转)水波纹过渡特效
  • 原文地址:https://www.cnblogs.com/lijianyi/p/14705812.html
Copyright © 2011-2022 走看看