iOS监听网络状态,有网时数据自动刷新

热门标签

,

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

我监听网络状况用的是AFNetNetWorking,你可以用其他的方法,原理都一样;我所有的控制器都继承于基类控制器;

1.监听网络

#pragma mark - 监测网络状态
- (void)monitorNetworkState{
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    [manager startMonitoring];
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        switch (status) {
            case AFNetworkReachabilityStatusNotReachable:
                NSLog(@"没有网络");
                PersonInfo.hasNet = NO;
                [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:KLoadDataBase object:nil userInfo:@{@"netType":@"NotReachable"}]];
                
                break;
            case AFNetworkReachabilityStatusUnknown:
                NSLog(@"未知");
                if(!PersonInfo.hasNet){
                    [YJYYStatusHUD hildErrorMessage];
                    [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:KLoadDataBase object:nil userInfo:@{@"netType":@"Unknown"}]];
                }
                PersonInfo.hasNet = YES;
                break;
            case AFNetworkReachabilityStatusReachableViaWiFi:
                NSLog(@"WiFi");
                if(!PersonInfo.hasNet){
                    [YJYYStatusHUD hildErrorMessage];
                    [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:KLoadDataBase object:nil userInfo:@{@"netType":@"WiFi"}]];
                }
                PersonInfo.hasNet = YES;
                break;
            case AFNetworkReachabilityStatusReachableViaWWAN:
                NSLog(@"3G|4G");
                if(!PersonInfo.hasNet){
                    [YJYYStatusHUD hildErrorMessage];
                    [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:KLoadDataBase object:nil userInfo:@{@"netType":@"WWAN"}]];
                }
                PersonInfo.hasNet = YES;
                break;
            default:
                break;
        }
    }];
    
}

每次网络发生改变我都发出通知;PersonInfo.hasNet是存放网络变化的值;我放在工程单利里面;

2.在基类里面接收广播:BaseViewController

我之所以把这个方法写在基类里面

- (void)getLoadDataBase:(NSNotification *)text;

是因为每个页面我都要用到;然后在其他页面只需要调用父类的方法即可;

//网络监听
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getLoadDataBase:) name:KLoadDataBase object:nil];
- (void)getLoadDataBase:(NSNotification *)text{
    NSLog(@"开始重新加载网络");
}
- (void)dealloc{
    [[NSNotificationCenter defaultCenter ]removeObserver:self name:KLoadDataBase object:nil];
}

3.选择在某个页面刷新数据;

比如首页数据;_isLoadHead表示这个页面是否加载过,如果加载过表示页面有数据,不需要自动刷新,如果一进来是断网状态这是没有数据的,然后在有网的时候,会自动加载刷新数据

- (void)getLoadDataBase:(NSNotification *)text{
    [super getLoadDataBase:text];
    if(!_isLoadHead){
        [self getAllClassDataBase];
    }
}
[self getAllClassDataBase];为加载数据的方法

比如有的页面我想要最新数据,那就简单一点,直接刷新就好了;

#pragma mark - 有网络后加载数据
- (void)getLoadDataBase:(NSNotification *)text{
    [super getLoadDataBase:text];
    [self.tableview.mj_header beginRefreshing];
}

 

未经允许不得转载:作者:SheaYang, 转载或复制请以 超链接形式 并注明出处 技术Dog|博客
原文地址:《iOS监听网络状态,有网时数据自动刷新》 发布于2019-11-02

分享到:
赞(0) 打赏

评论 抢沙发

8 + 9 =


iOS监听网络状态,有网时数据自动刷新

长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.0主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?