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;
    }
  • 相关阅读:
    【BZOJ3028】食物(生成函数基础题)
    【BZOJ2438】[中山市选2011] 杀人游戏(Tarjan)
    【BZOJ4833】[Lydsy1704月赛] 最小公倍佩尔数(神仙数学题)
    【BZOJ2109】【BZOJ2535】[NOI2010] 航空管制(拓扑反向建图)
    【BZOJ2679】[USACO2012 Open] Balanced Cow Subsets(Meet in Middle)
    【BZOJ3091】城市旅行(再次重拾LCT)
    sass与compass实战
    【Sass初级】开始使用Sass和Compass
    nodejs、sass、backbone等api地址
    解读2015之前端篇:工业时代 野蛮发展(转)
  • 原文地址:https://www.cnblogs.com/lijianyi/p/14705812.html
Copyright © 2011-2022 走看看