2017-01-27 3 views
2

Je travaille sur une application qui demande aux utilisateurs le numéro de téléphone et dispose d'un sélecteur de pays, où l'utilisateur doit entrer le code du pays.Déterminer le code du pays pour iOS Région "Europe"

Mais en testant des valeurs de code pays nul, j'ai découvert que mon iPhone avec iOS 10.2.1 avait un format de région défini sur Europe.

La région Europe n'existe pas dans la liste des régions lorsque je la recherche.

Lorsque je tente d'obtenir le code actuel du pays locale

NSLocale *currentLocale = [NSLocale currentLocale]; 
return [currentLocale objectForKey:NSLocaleCountryCode] 

Je reçois en_150 qui n'est pas utile pour déterminer le pays de l'utilisateur, au moins sur mon appareil. Le code pays retourné est , ce qui n'existe pas.

Je trouve une solution de contournement pour trouver le code de pays en utilisant CTTelephonyNetworkInfo

if(![currentLocale objectForKey:NSLocaleCountryCode]) { 
    CTCarrier *carrier = [[CTTelephonyNetworkInfo new] subscriberCellularProvider]; 
    NSString *countryCode = carrier.isoCountryCode; 

    return [countryCode capitalizedString]; 
} 

Mais comment il fonctionne avec ce lieu en Europe et pourquoi dois-je avoir mis comme ça?

Répondre

1

Tout d'abord, l'Europe n'est pas un pays. Il n'a pas de code de pays. Il a, cependant, un code de région. Ce code de région est en effet 150.

Les continents ont des indicatifs numériques numériques au lieu de 001 pour "Monde" et 150 pour "Europe".

Assurez-vous de lire mon article "Are there standard language codes for ‘World English’ and ‘European English’" pour une explication beaucoup plus détaillée. Ces codes sont basés sur la norme UN499, qui est à la base de la norme ISO 3166, qui est la norme à laquelle vous pensez probablement lorsque vous dites «codes de pays».

Le problème que vous rencontrez est que vous ne pouvez pas utiliser la langue de quelqu'un ou les préférences de formatage pour déterminer leur emplacement physique. Les paramètres régionaux de mon appareil actuel sont en_DK mais mon emplacement physique est NON. De nombreux appareils sont définis par défaut sur en_US et les utilisateurs du monde entier ne modifient jamais les paramètres par défaut.

Veuillez utiliser CoreLocation pour déterminer automatiquement l'emplacement de l'utilisateur ou demander à l'utilisateur de révéler son emplacement.