美文网首页
AFNetworkReachabilityManager 网络回

AFNetworkReachabilityManager 网络回

作者: 守护地中海的花 | 来源:发表于2021-11-05 11:47 被阅读0次

    某些界面当网络异常时候需要修改UI 所以网络回调显得很重要了

    小bug:

    • PPNetworkHelper库的时候 他的网络回调是在单例里面 导致 程序只有一个真正网络回调

      image.png
      如果是单例去掉 且也是覆盖
    • AFNetworkReachabilityManagersetReachabilityStatusChangeBlock方法 如果程序出现多次 会导致PPNetworkHelper 回调失效 (block覆盖掉)

      image.png

    总结:所以还是自己写一个网络监听类吧 (要么写在AppDelegate、TabbarController这样不会被销毁的地方吧,所以我写个单例吧)且网络请求以通知形式发布 避免block覆盖 保证AFNetworkReachabilityManager 回调程序当中 也仅有一个地方

    完整代码

    • .h
    #import <Foundation/Foundation.h>
    NS_ASSUME_NONNULL_BEGIN
    #define kNotificationName_NetWorkChanged  @"notificationName_NetWorkChanged"
    
    @interface AppNetworkMonitorManager : NSObject
    /// 单例创建对象
    + (instancetype)sharedInstance;
    
    /// 有网YES, 无网:NO
    - (BOOL)isNetwork;
    
    /// 手机网络:YES, 反之:NO
    - (BOOL)isWWANNetwork;
    
    /// WiFi网络:YES, 反之:NO
    - (BOOL)isWiFiNetwork;
    
    @end
    
    NS_ASSUME_NONNULL_END
    
    
    • .m
    #import "AppNetworkMonitorManager.h"
    #import <AFNetworking.h>
    @interface AppNetworkMonitorManager ()
    
    @end
    
    @implementation AppNetworkMonitorManager
    static AppNetworkMonitorManager *instance;
    + (instancetype)sharedInstance {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            instance = [[self alloc]init];
            AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
            //[manager startMonitoring];
            [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
                switch (status) {
                    case AFNetworkReachabilityStatusUnknown:
                    {
                        NSLog(@"未知网络");
                    }
                        break;
                    case AFNetworkReachabilityStatusNotReachable:
                    {
                        NSLog(@"无网络");
                    }
                        break;
                    case AFNetworkReachabilityStatusReachableViaWWAN:
                    {
                        NSLog(@"手机自带网络");
                    }
                        break;
                    case AFNetworkReachabilityStatusReachableViaWiFi:
                    {
                        NSLog(@"WIFI");
                    }
                        break;
                    default:
                        break;
                }
                [[NSNotificationCenter defaultCenter]postNotificationName:kNotificationName_NetWorkChanged object:@"1" userInfo:@{@"name":@"wpp"}];
            }];
        });
        return instance;
    }
    - (BOOL)isNetwork {
        return [AFNetworkReachabilityManager sharedManager].reachable;
    }
    
    - (BOOL)isWWANNetwork {
        return [AFNetworkReachabilityManager sharedManager].reachableViaWWAN;
    }
    
    - (BOOL)isWiFiNetwork {
        return [AFNetworkReachabilityManager sharedManager].reachableViaWiFi;
    }
    @end
    
    

    相关文章

      网友评论

          本文标题:AFNetworkReachabilityManager 网络回

          本文链接:https://www.haomeiwen.com/subject/iejkzltx.html