Iphone, obteniendo una lista de países en un NSArray

votos
42

Tengo un menú que permite a un usuario seleccionar un país. Exactamente así en el menú de países de contacts.app dentro del campo de dirección.

¿Alguien sabe una forma simple de obtener una lista de países? Utilicé NSLocale para generar una matriz de países, pero solo son los códigos de país desafortunadamente y no el equivalente legible para humanos. No quiero 'GB' Quiero Gran Bretaña.

Publicado el 02/02/2009 a las 11:22
fuente por usuario
En otros idiomas...                            


6 respuestas

votos
92

Gracias Chuck.

Si alguien está interesado o quiere encontrar la misma solución, aquí está mi código para una selección ordenada de países.

C objetivo:

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:)];

Rápido:

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()
Respondida el 02/02/2009 a las 12:09
fuente por usuario

votos
38

Use [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode](donde countryCode es un elemento en su lista de códigos de país) para obtener el nombre del país en la configuración regional actual del usuario.

Respondida el 02/02/2009 a las 12:04
fuente por usuario

votos
15

Es posible que desee para definir la configuración regional ..
y no hay demasiada memoria autoreleased, lo que podría ser crítico, vosotros nunca se sabe. por tanto, crear piscina autoreleased dentro del bucle también. Tengo esto:

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:)];
Respondida el 07/04/2010 a las 11:37
fuente por usuario

votos
2

Swift 3

let locale = Locale.current
let countries = Locale.isoRegionCodes.map {
    locale.localizedString(forRegionCode: $0)!
}.sorted()
Respondida el 13/10/2016 a las 03:07
fuente por usuario

votos
0

Consiguió éste trabaja en parques infantiles

let locale = NSLocale(localeIdentifier: "FI")
let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) }
let sortedCountries = unsortedCountries.sorted()
Respondida el 13/09/2017 a las 04:48
fuente por usuario

votos
0

Más o menos la misma respuesta que el anterior, sólo utiliza flatMapa ser más corto y swiftier.

let locale = NSLocale.currentLocale()
var countries = NSLocale.ISOCountryCodes().flatMap { countryCode in
    return locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
}
countries.sortInPlace()
Respondida el 13/05/2016 a las 11:49
fuente por usuario

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