2009-02-02 69 views
42

我有一個菜單讓用戶選擇一個國家。完全像地址欄中的contacts.app國家菜單一樣。Iphone,獲取NSArray國家列表

有沒有人知道獲取國家列表的簡單方法?我使用NSLocale來生成一個國家的數組,但不幸的是這只是國家代碼而不是人們可讀的等價物。我不想'GB'我想要英國。

+0

該工作這個人是不是與iOS 8.1模擬器的工作看到這個帖子: - http://stackoverflow.com/questions/26613011/xcode-6-1-ios-8-1-nslocale-displaynameforkey-nslocaleidentifier -return-nil – 2014-12-04 11:28:24

回答

38

使用[[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode](其中countryCode是您的國家/地區代碼列表中的項目)以獲取用戶當前區域設置中的國家/地區名稱。

90

謝謝查克。

如果任何人有興趣或想找到相同的解決方案這裏是我的代碼排序的國家數組。

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

斯威夫特:

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, <) 

斯威夫特3

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

您可能想要初始化'sortedCountryArray`,其容量爲'countryArr ay.count`。 – DeFrenZ 2014-09-29 14:02:47

15

您可能希望定義LO ...
並且有太多的自動釋放內存,這可能是關鍵的,你永遠不知道。所以在for循環中創建autoreleased池也是如此。 我有這樣的:

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

差不多與上面相同的答案,只是使用flatMap更短和swiftier。

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

斯威夫特3

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

上了車操場

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