• 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;
    }
  • 相关阅读:
    AccessControlAllowOrigin 跨域设置多域名
    C#基于LibUsbDotNet实现USB通信(一)
    移动端设置行高等于高度的时候文本不居中???
    阿里云OSS设置跨域访问还是不行。
    没错,就是AccessControlAllowOrigin,跨域
    移动端 lineheight 文字不居中问题解决方案
    Chromium.org team 改进vs编译速度的一些建议
    isapi x86 在win7x64下的安装问题
    Entity Framwork one to one problem
    Google Talk使用技巧
  • 原文地址:https://www.cnblogs.com/lijianyi/p/14705812.html
Copyright © 2020-2023  润新知