Iphone, bir NSArray ülkelerin listesi alma

oy
42

Bir kullanıcı bir ülke seçin kullanımına açması bir menü var. Tam adres alanı içinde contacts.app ülke menüde böyle.

Herkes ülkelerin bir listesini alma basit bir yol biliyor mu? Ben ülkelerde bir dizi oluşturmak için NSLocale kullanmış ancak yalnızca ülke kodları maalesef değil Okunabilir eşdeğerdir. Ben Büyük Britanya istiyorum 'GB' istemiyoruz.

Oluştur 02/02/2009 saat 11:22
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
92

Teşekkürler Chuck.

Herkes ilgileniyor veya aynı çözüm bulmak istiyorsa burada ülkelerin sıralanmış bir dizi için benim kodudur.

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()
Cevap 02/02/2009 saat 12:09
kaynak kullanıcı

oy
38

Kullanım [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode]kullanıcının geçerli yerel ayarda ülkenin adını almak için (countryCode ülke kodlarının listenizde bir öğe olduğu).

Cevap 02/02/2009 saat 12:04
kaynak kullanıcı

oy
15

Sen yerel tanımlamak isteyebilirsiniz ..
ve kritik olabilir, siz bilemezsiniz çok fazla autoreleased hafıza vardır. böylece hem for döngüsü içinde autoreleased havuzu oluşturun. Bunu ettik:

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:)];
Cevap 07/04/2010 saat 11:37
kaynak kullanıcı

oy
2

Swift 3

let locale = Locale.current
let countries = Locale.isoRegionCodes.map {
    locale.localizedString(forRegionCode: $0)!
}.sorted()
Cevap 13/10/2016 saat 06:07
kaynak kullanıcı

oy
0

bu bir oyun üzerinde çalışıyor var

let locale = NSLocale(localeIdentifier: "FI")
let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) }
let sortedCountries = unsortedCountries.sorted()
Cevap 13/09/2017 saat 07:48
kaynak kullanıcı

oy
0

Hemen hemen Yukarıdaki aynı cevap, sadece kullanır flatMapdaha kısa ve swiftier olmak.

let locale = NSLocale.currentLocale()
var countries = NSLocale.ISOCountryCodes().flatMap { countryCode in
    return locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
}
countries.sortInPlace()
Cevap 13/05/2016 saat 14:49
kaynak kullanıcı

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