Iphone, Abrufen einer Liste der Länder in einer NSArray

stimmen
42

Ich habe ein Menü, das ein Benutzer lassen ist ein Land auswählen. Genau wie in dem contacts.app Land Menü im Adressfeld.

Kennt jemand eine einfache Möglichkeit, eine Liste von Ländern zu bekommen? Ich habe NSLocale verwendet, um eine Reihe von Ländern zu erzeugen, aber es ist nur die Ländercodes leider und nicht die für Menschen lesbare Äquivalent. Ich will nicht ‚GB‘ I Großbritannien will.

Veröffentlicht am 02/02/2009 um 11:22
quelle vom benutzer
In anderen Sprachen...                            


6 antworten

stimmen
92

Dank Futter.

Wenn jemand interessiert ist oder wollte die gleiche Lösung finden, hier ist mein Code für eine sortierte Reihe von Ländern.

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

Schnell:

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()
Beantwortet am 02/02/2009 um 12:09
quelle vom benutzer

stimmen
38

Verwenden Sie [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode](wo ein country Artikel in der Liste der Ländercodes ist) den Namen des Landes in des Benutzers aktuellen Locale zu erhalten.

Beantwortet am 02/02/2009 um 12:04
quelle vom benutzer

stimmen
15

Vielleicht möchten Sie locale definieren ..
und es gibt zu viel Autoreleased Gedächtnis, das könnte entscheidend sein, ihr nie wissen. so erstellen Autoreleased Pool innerhalb der for - Schleife als auch. Ich habe dies:

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:)];
Beantwortet am 07/04/2010 um 11:37
quelle vom benutzer

stimmen
2

Swift 3

let locale = Locale.current
let countries = Locale.isoRegionCodes.map {
    locale.localizedString(forRegionCode: $0)!
}.sorted()
Beantwortet am 13/10/2016 um 06:07
quelle vom benutzer

stimmen
0

Hat sich dieses auf Spielplätzen arbeiten

let locale = NSLocale(localeIdentifier: "FI")
let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) }
let sortedCountries = unsortedCountries.sorted()
Beantwortet am 13/09/2017 um 07:48
quelle vom benutzer

stimmen
0

So ziemlich die gleiche Antwort wie oben, verwendet nur flatMapkürzer und swiftier zu sein.

let locale = NSLocale.currentLocale()
var countries = NSLocale.ISOCountryCodes().flatMap { countryCode in
    return locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
}
countries.sortInPlace()
Beantwortet am 13/05/2016 um 14:49
quelle vom benutzer

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