IPhone, Uzyskanie listy krajów w NSArray

głosy
42

Mam menu, które pozwoli to użytkownikowi wybrać kraj. Dokładnie tak, że w menu kraju contacts.app w polu adresu.

Czy ktoś zna prosty sposób na uzyskanie listę krajów? Użyłem NSLocale wygenerować tablicę krajach, ale to tylko kody krajów i niestety nie ludzki odpowiednik czytelny. Nie chcę „GB” Chcę Wielką Brytanią.

Utwórz 02/02/2009 o 11:22
źródło użytkownik
W innych językach...                            


6 odpowiedzi

głosy
92

Dzięki Chuck.

Jeśli ktoś jest zainteresowany lub chce znaleźć to samo rozwiązanie tutaj jest mój kod na posortowanej tablicy krajów.

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

Szybki:

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()
Odpowiedział 02/02/2009 o 12:09
źródło użytkownik

głosy
38

Użyj [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode](gdzie countryCode jest pozycja na liście kodów krajów), aby uzyskać nazwę kraju w bieżącej lokalizacji użytkownika.

Odpowiedział 02/02/2009 o 12:04
źródło użytkownik

głosy
15

Może chcesz określić ustawienia regionalne ..
i nie ma zbyt wiele autoreleased pamięci, który może być krytyczny, nigdy nie dowiecie. więc tworzyć autoreleased basen wewnątrz pętli, jak również. Mam to:

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:)];
Odpowiedział 07/04/2010 o 11:37
źródło użytkownik

głosy
2

Swift 3

let locale = Locale.current
let countries = Locale.isoRegionCodes.map {
    locale.localizedString(forRegionCode: $0)!
}.sorted()
Odpowiedział 13/10/2016 o 06:07
źródło użytkownik

głosy
0

Ale ten działa na placach zabaw

let locale = NSLocale(localeIdentifier: "FI")
let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) }
let sortedCountries = unsortedCountries.sorted()
Odpowiedział 13/09/2017 o 07:48
źródło użytkownik

głosy
0

Prawie taka sama odpowiedź jak wyżej, tylko używa flatMapsię krótsze i swiftier.

let locale = NSLocale.currentLocale()
var countries = NSLocale.ISOCountryCodes().flatMap { countryCode in
    return locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
}
countries.sortInPlace()
Odpowiedział 13/05/2016 o 14:49
źródło użytkownik

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