Iphone, la obtención de una list de países en un NSArray

Tengo un menu que permite que un usuario select un país. Exactamente así en los contactos. Abre el menu del país dentro del campo de dirección.

¿Alguien sabe una forma simple de get una list de países? He usado NSLocale para generar una variedad de países, pero desgraciadamente solo son los códigos de país y no el equivalente legible para humanos. No quiero 'GB'. Quiero Gran Bretaña.

Utilice [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode] (donde countryCode es un elemento en su list de códigos de país) para get el nombre del país en la configuration regional actual del usuario.

Gracias tirada

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

C objective:

 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() 

Es posible que desee definir la configuration regional.
y hay demasiada memory autoreleased, lo que puede ser crítico, nunca se sabe. así que cree el pool autoreleased dentro del bucle for 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:)]; 

Swift 3

 let locale = Locale.current let countries = Locale.isoRegionCodes.map { locale.localizedString(forRegionCode: $0)! }.sorted() 

Más o less la misma respuesta que arriba, simplemente usa flatMap para ser más corto y rápido.

 let locale = NSLocale.currentLocale() var countries = NSLocale.ISOCountryCodes().flatMap { countryCode in return locale.displayNameForKey(NSLocaleCountryCode, value: countryCode) } countries.sortInPlace() 

Consiguió este trabajando en patios de recreo.

 let locale = NSLocale(localeIdentifier: "FI") let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) } let sortedCountries = unsortedCountries.sorted()