Iphone, Ottenere un elenco dei paesi in un NSArray

voti
42

Ho un menu che diamo all'utente di selezionare un paese. Esattamente come quella nel menu Paese contacts.app nel campo indirizzo.

Qualcuno sa un modo semplice per ottenere un elenco di paesi? Ho usato NSLocale per generare una serie di paesi, ma è solo il codice del paese, purtroppo, e non l'equivalente leggibile. Non voglio 'GB' Voglio la Gran Bretagna.

È pubblicato 02/02/2009 alle 11:22
fonte dall'utente
In altre lingue...                            


6 risposte

voti
92

Grazie mandrino.

Se qualcuno è interessato o ha voluto trovare la stessa soluzione ecco il mio codice per un array ordinato di paesi.

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

Swift:

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()
Risposto il 02/02/2009 a 12:09
fonte dall'utente

voti
38

Usa [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode](dove countryCode è un elemento nella lista dei codici dei paesi) per ottenere il nome del paese nella corrente locale dell'utente.

Risposto il 02/02/2009 a 12:04
fonte dall'utente

voti
15

Si potrebbe desidera definire locale ..
e non v'è la memoria troppo autoreleased, che potrebbe essere critico, voi non si sa mai. in modo da creare piscina autoreleased all'interno del ciclo for pure. Ho questo:

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:)];
Risposto il 07/04/2010 a 11:37
fonte dall'utente

voti
2

Swift 3

let locale = Locale.current
let countries = Locale.isoRegionCodes.map {
    locale.localizedString(forRegionCode: $0)!
}.sorted()
Risposto il 13/10/2016 a 06:07
fonte dall'utente

voti
0

Ottenuto questo lavorando su campi da gioco

let locale = NSLocale(localeIdentifier: "FI")
let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) }
let sortedCountries = unsortedCountries.sorted()
Risposto il 13/09/2017 a 07:48
fonte dall'utente

voti
0

Praticamente la stessa risposta di cui sopra, utilizza solo flatMapper essere più breve e swiftier.

let locale = NSLocale.currentLocale()
var countries = NSLocale.ISOCountryCodes().flatMap { countryCode in
    return locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
}
countries.sortInPlace()
Risposto il 13/05/2016 a 14:49
fonte dall'utente

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