2017-09-27 5 views
2

Unten ist mein Code und ich versuche Signalstärke durch Statusleiste zu bekommen.Get zellulare Signal von statusbar Absturz

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

Absturz ereignete sich am (iOS 11, Xcode 9, iPhone X): -

[UIStatusBar_Modern valueForUndefinedKey:]: diese Klasse nicht Schlüsselwert ist Codierung-konform für den Schlüssel foregroundView

+0

Was Sie wollen? WLAN Signal? Nein von Bars? – KiranJasvanee

+0

Nein der aktiven Bar von Wifi-Signal? oder Signalmodus? – KiranJasvanee

+0

@KiranJasvanee Ich möchte Netzwerktyp 3g, 4g, Wifi, LTE .. – Ashish

Antwort

6

können Sie dieses verwenden

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

Ich habe eine Frage nach diesem, von welchem ​​Schlüssel zu bekommen, wenn Wi-Fi, 3g oder lte ist ..? – Ashish

+0

Danke @yz wu das ist genau das, was ich gesucht habe +1 –

+0

@Ashish das obige Code-Snippet löst das Problem mit iPhone X ändert. Um den Code zu erhalten, müssen Sie die Subviews loopen, um die Ansicht 'UIStatusBarDataNetworkItemView' zu extrahieren und dann den Wert' dataNetworkType' zu ​​erhalten. Es geht ungefähr so. 'für (id subview in Subviews) {' 'if ([subview isKindOfClass:' '[NSClassFromString (@ "UIStatusBarDataNetworkItemView") Klasse]]) {' '[(NSNumber *) [subview valueForKey: @ "dataNetworkType"] intValue]; // dataNetworkType Wert sicher sein, zu speichern und zu verwenden, oder es von einer Methode zurückgeben 'break;' '}' '}' –