某些界面当网络异常时候需要修改UI 所以网络回调显得很重要了
小bug:
-
用
PPNetworkHelper
库的时候 他的网络回调是在单例里面 导致 程序只有一个真正网络回调
如果是单例去掉 且也是覆盖 -
AFNetworkReachabilityManager
的setReachabilityStatusChangeBlock
方法 如果程序出现多次 会导致PPNetworkHelper 回调失效 (block覆盖掉)
总结:所以还是自己写一个网络监听类吧 (要么写在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