2017-09-27 104 views
2

下面是我的代码,我试图通过状态栏获取信号强度。从状态栏崩溃获取手机信号

UIApplication *app = [UIApplication sharedApplication]; 
NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; 

碰撞发生在(iOS的11时,Xcode 9,iPhone X): -

[UIStatusBar_Modern valueForUndefinedKey:]:这个类不是密钥值编码兼容的关键foregroundView

+0

你想要什么? Wifi信号?没有酒吧? – KiranJasvanee

+0

没有wifi信号的活动栏?或SignalMode? – KiranJasvanee

+0

@KiranJasvanee我想要网络类型3g,4g,Wifi,LTE .. – Ashish

回答

6

你可以用这个

NSArray *subviews = nil; 
id statusBar = [[UIApplication sharedApplication] valueForKey:@"statusBar"]; 
if ([statusBar isKindOfClass:NSClassFromString(@"UIStatusBar_Modern")]) { 
    subviews = [[[statusBar valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; 
} else { 
    subviews = [[statusBar valueForKey:@"foregroundView"] subviews]; 
} 
+0

我有问题发布这个,从哪个关键得到如果wifi,3g或lte在那里..? – Ashish

+0

谢谢@yz wu这正是我正在寻找的+1 –

+0

@Ashish上面的代码片段解决了iPhone X更改的问题。为了获得代码,你必须循环子视图来提取'UIStatusBarDataNetworkItemView'视图,然后获取其'dataNetworkType'值。它是这样的。 '为(在子视图ID子视图){' '如果([子视图isKindOfClass:' '[NSClassFromString(@ “UIStatusBarDataNetworkItemView”)类]]){' '[(的NSNumber *)[子视图valueForKey:@“dataNetworkType”] intValue]; // dataNetworkType值一定要存储和使用它,或者从方法中返回它 'break;' '}' '}' –