web-dev-qa-db-ja.com

Iphone、NSArray内の国のリストの取得

ユーザーが国を選択できるメニューがあります。住所フィールド内のcontacts.app国メニューのそれとまったく同じです。

国のリストを取得する簡単な方法を知っている人はいますか?国の配列を生成するためにNSLocaleを使用しましたが、残念ながら国コードのみであり、人間が読める形式のものではありません。 「GB」は欲しくないイギリスが欲しい。

43
Dan Morgan

使用する [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode](countryCodeは国コードのリストにある項目)を使用して、ユーザーの現在のロケールでの国の名前を取得します。

38
Chuck

ありがとうチャック。

誰かが興味を持っているか、同じ解決策を見つけたい場合は、並べ替えられた国の配列の私のコードです。

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

    let locale = NSLocale.current
    let unsortedCountries = NSLocale.isoCountryCodes.map { locale.localizedString(forRegionCode: $0)! }
    let sortedCountries = unsortedCountries.sorted()
94
Dan Morgan

ロケールを定義したいかもしれません。
そして、自動解放されたメモリが多すぎます。これは重要かもしれません。したがって、forループ内にも自動解放プールを作成します。私はこれを持っています:

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:)];
15
Mk.zRealDeal

Swift

let locale = Locale.current
let countries = Locale.isoRegionCodes.map {
    locale.localizedString(forRegionCode: $0)!
}.sorted()
2
Davuth

これは遊び場で働いています

let locale = NSLocale(localeIdentifier: "FI")
let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) }
let sortedCountries = unsortedCountries.sorted()
0
João Nunes

上記とほぼ同じ答えですが、flatMapを使用するだけで、短くて迅速になります。

let locale = NSLocale.currentLocale()
var countries = NSLocale.ISOCountryCodes().flatMap { countryCode in
    return locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
}
countries.sortInPlace()
0
orkoden