2011-11-11 16 views
26

Necesito convertir una lista de códigos de país en una matriz de país. Esto es lo que he hecho hasta ahora.Conversión de códigos de país a nombres de país

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    pickerViewArray = [[NSMutableArray alloc] init]; //pickerViewArray is of type NSArray; 
    pickerViewArray =[NSLocale ISOCountryCodes]; 
} 
+0

Lo sentimos, que es de tipo NSMutableArray; – user1036183

+2

Acepte algunas respuestas (en sus preguntas anteriores) para que le devuelva algo a la comunidad. – Jef

Respuesta

55

Usted puede obtener un identificador para un código de país con localeIdentifierFromComponents: y luego obtener su displayName.

Así que para crear una matriz con los nombres de país que puede hacer:

NSMutableArray *countries = [NSMutableArray arrayWithCapacity: [[NSLocale ISOCountryCodes] count]]; 

for (NSString *countryCode in [NSLocale ISOCountryCodes]) 
{ 
    NSString *identifier = [NSLocale localeIdentifierFromComponents: [NSDictionary dictionaryWithObject: countryCode forKey: NSLocaleCountryCode]]; 
    NSString *country = [[NSLocale currentLocale] displayNameForKey: NSLocaleIdentifier value: identifier]; 
    [countries addObject: country]; 
} 

Para ordenar alfabéticamente puede agregar

NSArray *sortedCountries = [countries sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 

Tenga en cuenta que la matriz ordenada es inmutable.

+0

¡Gracias pero la lista no está ordenada! como hacer eso ? – user1036183

+0

Edité mi respuesta suponiendo que desea ordenarla alfabéticamente. – Jef

+0

Funciona como un encanto. ¡Bien hecho! : D –

25

Esto funcionará en iOS8:

NSArray *countryCodes = [NSLocale ISOCountryCodes]; 
NSMutableArray *tmp = [NSMutableArray arrayWithCapacity:[countryCodes count]]; 
for (NSString *countryCode in countryCodes) 
{ 
    NSString *country = [[NSLocale systemLocale] displayNameForKey:NSLocaleCountryCode value:countryCode]; 
    [tmp addObject: country]; 
} 
6

En iOS 9 y superior se puede recuperar el nombre del país desde el código de país haciendo:

NSString *countryName = [[NSLocale systemLocale] displayNameForKey:NSLocaleCountryCode value:countryCode]; 

Dónde countryCode es, obviamente, el código de país . (por ejemplo, "EE. UU.")

17

En Swift 3, la superposición de la Fundación cambió bastante.

let countryName = Locale.current.localizedString(forRegionCode: countryCode) 

Si desea nombres de países en diferentes idiomas puede especificar la localización deseada:

let locale = Locale(identifier: "es_ES") // Country names in Spanish 
let countryName = locale.localizedString(forRegionCode: countryCode) 
+1

Muchas gracias :) – fancy

Cuestiones relacionadas