2017-09-27 4 views
2

Ci-dessous est mon code et j'essaie d'obtenir la force du signal grâce à la barre d'état.Obtenir le signal cellulaire du crash de la barre d'état

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

crash a eu lieu le (iOS 11, Xcode 9, iPhone X): -

[UIStatusBar_Modern valueForUndefinedKey:]: cette classe n'est pas valeur de clé de codage conforme à la foregroundView clé

+0

Qu'est-ce que vous voulez? Signal Wifi? Non de barres? – KiranJasvanee

+0

Non de la barre active du signal wifi? ou SignalMode? – KiranJasvanee

+0

@KiranJasvanee Je veux le type de réseau 3g, 4g, Wifi, LTE .. – Ashish

Répondre

6

vous pouvez utiliser cette

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

Je suis en train de publier ce post, à partir de quelle clé pour obtenir si wifi, 3g ou lte est là ..? – Ashish

+0

Merci @yz wu c'est exactement ce que je cherchais +1 –

+0

@Ashish l'extrait de code ci-dessus résout le problème avec les changements iPhone X. Pour obtenir le code, vous devez boucler les sous-vues pour extraire la vue 'UIStatusBarDataNetworkItemView' et obtenir sa valeur' dataNetworkType'. Ca fait plutot comme ca. 'pour (id sous-vue dans subviews) {' 'if ([sous-vue isKindOfClass:' '[NSClassFromString (@ classe "UIStatusBarDataNetworkItemView")]]) {' '[(NSNumber *) [de sous-vue valueForKey: @ "dataNetworkType"] intValue]; // valeur dataNetworkType assurez-vous de le stocker et de l'utiliser, ou de le renvoyer d'une méthode ' ' break; ' '} ' '} ' –