Iphone, Het verkrijgen van een lijst van landen in een NSArray

stemmen
42

Ik heb een menu waarmee een gebruiker een land te selecteren. Precies zoals dat in het contacts.app land menu binnen het adresveld.

Weet iemand een eenvoudige manier om een ​​lijst van landen? Ik heb gebruikt NSLocale om een ​​reeks landen genereren, maar het is alleen het land codes helaas en niet de door mensen leesbare equivalent. Ik wil niet dat 'GB' Ik wil Groot-Brittannië.

De vraag is gesteld op 02/02/2009 om 11:22
bron van user
In andere talen...                            


6 antwoorden

stemmen
92

Thanks chuck.

Als iedereen die geïnteresseerd is of wilde hetzelfde oplossing te vinden hier is mijn code voor een gesorteerde array van landen.

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

Snel:

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()
antwoordde op 02/02/2009 om 12:09
bron van user

stemmen
38

Gebruik [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode](waar countryCode is een item in de lijst met land codes) naar de naam van het land te krijgen in de huidige locatie van de gebruiker.

antwoordde op 02/02/2009 om 12:04
bron van user

stemmen
15

Je zou willen locale definiëren ..
en er is te veel autoreleased geheugen, die kritisch kunnen zijn, gij nooit weten. dus creëren autoreleased zwembad in de lus ook. Ik heb dit:

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:)];
antwoordde op 07/04/2010 om 11:37
bron van user

stemmen
2

Swift 3

let locale = Locale.current
let countries = Locale.isoRegionCodes.map {
    locale.localizedString(forRegionCode: $0)!
}.sorted()
antwoordde op 13/10/2016 om 06:07
bron van user

stemmen
0

Kreeg deze werken op speelplaatsen

let locale = NSLocale(localeIdentifier: "FI")
let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) }
let sortedCountries = unsortedCountries.sorted()
antwoordde op 13/09/2017 om 07:48
bron van user

stemmen
0

Vrijwel hetzelfde antwoord als hierboven, gebruikt alleen maar flatMapkorter en swiftier zijn.

let locale = NSLocale.currentLocale()
var countries = NSLocale.ISOCountryCodes().flatMap { countryCode in
    return locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
}
countries.sortInPlace()
antwoordde op 13/05/2016 om 14:49
bron van user

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