前言
- 白雪公主当初就是吃了有毒的苹果晕倒了,在学习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是开模拟器用的,在真机上就没这个问题了
- 但为了我们开发便利,显然还是要找个“更好”的方法
- 不过这说白了,已经脱离实际了。。。
网友评论