Run Snow-white ! Run ! (1) Simulator上判断网络状态怎么就这么难

版权声明:欢迎指出错误,作者极懒,常常懒得修改 https://blog.csdn.net/KevinAshen/article/details/85239690

前言

  • 白雪公主当初就是吃了有毒的苹果晕倒了,在学习iOS开发的过程中,我也时不时感受到苹果的“毒性”,所以让我们来写一系列文章吐槽吧!
  • 本系列包含众多胡说八道,作者更是一个学习编程的小学生,经常写了文章之后发现错误连篇,结果还懒得改,实在罪大恶极,大家见到他后一定请他吃饭,让他羞愧而死

吐槽

  • 最近在写无网络时的数据缓存,发现这个Simulator上的网络异常的反人类
  • 首先很遗憾你不能在settings里面关闭Wi-Fi
  • 其次就算你把电脑的网络关掉了,statusBar上的Wi-Fi标志依然如同小学生胸前的红领巾一样鲜艳坚挺

参考文章

一般判断方式:通过系统statusBar判断

//获取当前网络状态  (iPhone X 上可能引发崩溃)
+ (NSString *)networkingStatesFromStatebar {  
    // 状态栏是由当前app控制的,首先获取当前app  
    UIApplication *app = [UIApplication sharedApplication];  
    //iphone X 会在这里崩溃
    NSArray *children = [[[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];    
       
    int type = 0;  
    for (id child in children) {  
        if ([child isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {  
            type = [[child valueForKeyPath:@"dataNetworkType"] intValue];  
        }  
    }  
       
    NSString *stateString = @"wifi";  
       
    switch (type) {  
        case 0:  
            stateString = @"notReachable";  
            break;  
               
        case 1:  
            stateString = @"2G";  
            break;  
               
        case 2:  
            stateString = @"3G";  
            break;  
               
        case 3:  
            stateString = @"4G";  
            break;  
               
        case 4:  
            stateString = @"LTE";  
            break;  
               
        case 5:  
            stateString = @"wifi";  
            break;  
               
        default:  
            break;  
    }  
       
    return stateString;  
}
  • 其实就是通过statusBar上的网络图标判断,这个讲道理我个人认为本来就是最靠谱的,iOS的优点不就应该体现在这种统一性上吗?
  • 但由于我在最开始说的种种原因,这个方法并没有什么用,不管你是不是网络世界的一座孤岛,你的Simulator状态栏就和画上去的一样,纹丝不动。
  • 当然,也没谁用个APP是开模拟器用的,在真机上就没这个问题了
  • 但为了我们开发便利,显然还是要找个“更好”的方法
  • 不过这说白了,已经脱离实际了。。。

猜你喜欢

转载自blog.csdn.net/KevinAshen/article/details/85239690
run