Iphone, L'obtention d'une liste de pays dans un NSArray

voix
42

J'ai un menu qui nous laissent un utilisateur de sélectionner un pays. Exactement comme dans le menu pays contacts.app dans le champ d'adresse.

Est-ce que quelqu'un connait un moyen simple d'obtenir une liste des pays? Je l'ai utilisé NSLocale pour générer un éventail de pays, mais il est seulement les codes de pays, malheureusement, et non l'équivalent lisible par l'homme. Je ne veux pas « Go » Je veux la Grande-Bretagne.

Créé 02/02/2009 à 11:22
source utilisateur
Dans d'autres langues...                            


6 réponses

voix
92

chuck Merci.

Si quelqu'un est intéressé ou voulu trouver la même solution ici est mon code pour un tableau des pays triés.

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()
Créé 02/02/2009 à 12:09
source utilisateur

voix
38

Utilisez [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode](où countryCode est un élément dans la liste des codes pays) pour obtenir le nom du pays dans l' environnement linguistique actuel de l'utilisateur.

Créé 02/02/2009 à 12:04
source utilisateur

voix
15

Vous pouvez définir locale ..
et il y a trop de mémoire autoreleased, ce qui pourrait être critique, vous ne savez jamais. afin de créer la piscine autoreleased dans la boucle ainsi. J'ai ceci:

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:)];
Créé 07/04/2010 à 11:37
source utilisateur

voix
2

Swift 3

let locale = Locale.current
let countries = Locale.isoRegionCodes.map {
    locale.localizedString(forRegionCode: $0)!
}.sorted()
Créé 13/10/2016 à 06:07
source utilisateur

voix
0

A été celui-ci travaille sur les terrains de jeu

let locale = NSLocale(localeIdentifier: "FI")
let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) }
let sortedCountries = unsortedCountries.sorted()
Créé 13/09/2017 à 07:48
source utilisateur

voix
0

A peu près la même réponse que ci - dessus, utilise juste flatMappour être plus court et swiftier.

let locale = NSLocale.currentLocale()
var countries = NSLocale.ISOCountryCodes().flatMap { countryCode in
    return locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
}
countries.sortInPlace()
Créé 13/05/2016 à 14:49
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more