J'ai un menu qui permet à un utilisateur de sélectionner un pays. Exactement comme cela dans le menu pays de contacts.app dans le champ d'adresse.
Est-ce que quelqu'un connaît un moyen simple d'obtenir une liste de pays? J'ai utilisé NSLocale pour générer un éventail de pays, mais ce ne sont malheureusement que les codes de pays et non l'équivalent lisible par l'homme. Je ne veux pas de «GB», je veux la Grande-Bretagne.
Utilisez [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode]
(où countryCode est un élément de votre liste de codes de pays) pour obtenir le nom du pays dans les paramètres régionaux actuels de l'utilisateur.
Merci chuck.
Si quelqu'un est intéressé ou veut trouver la même solution, voici mon code pour un éventail trié de pays.
Objectif c:
NSLocale *locale = [NSLocale currentLocale];
NSArray *countryArray = [NSLocale ISOCountryCodes];
NSMutableArray *sortedCountryArray = [[NSMutableArray alloc] init];
for (NSString *countryCode in countryArray) {
NSString *displayNameString = [locale displayNameForKey:NSLocaleCountryCode value:countryCode];
[sortedCountryArray addObject:displayNameString];
}
[sortedCountryArray sortUsingSelector:@selector(localizedCompare:)];
Rapide:
let locale = NSLocale.currentLocale()
let countryArray = NSLocale.ISOCountryCodes()
var unsortedCountryArray:[String] = []
for countryCode in countryArray {
let displayNameString = locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
if displayNameString != nil {
unsortedCountryArray.append(displayNameString!)
}
}
let sortedCountryArray = sorted(unsortedCountryArray, <)
Swift 3
let locale = NSLocale.current
let unsortedCountries = NSLocale.isoCountryCodes.map { locale.localizedString(forRegionCode: $0)! }
let sortedCountries = unsortedCountries.sorted()
Vous voudrez peut-être définir les paramètres régionaux.
et il y a trop de mémoire libérée automatiquement, ce qui pourrait être critique, vous ne savez jamais. Créez donc également un pool autoreleased dans la boucle for.
NSMutableArray * countriesArray = [[NSMutableArray alloc] init];
NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier: @"en_US"] autorelease];
NSArray *countryArray = [NSLocale ISOCountryCodes];
for (NSString *countryCode in countryArray)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *displayNameString = [locale displayNameForKey:NSLocaleCountryCode value:countryCode];
[countriesArray addObject:displayNameString];
[pool release];
}
[countriesArray sortUsingSelector:@selector(compare:)];
Swift 3
let locale = Locale.current
let countries = Locale.isoRegionCodes.map {
locale.localizedString(forRegionCode: $0)!
}.sorted()
Vous avez celui-ci travaillant sur les terrains de jeux
let locale = NSLocale(localeIdentifier: "FI")
let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) }
let sortedCountries = unsortedCountries.sorted()
À peu près la même réponse que ci-dessus, utilise simplement flatMap
pour être plus court et plus rapide.
let locale = NSLocale.currentLocale()
var countries = NSLocale.ISOCountryCodes().flatMap { countryCode in
return locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
}
countries.sortInPlace()