iPhone,获取NSArray中国家列表

43

我有一个菜单,可以让用户选择一个国家,就像通讯录中地址字段中的国家菜单一样。

有没有人知道获取国家列表的简单方法?我已经使用NSLocale生成了一个国家数组,但不幸的是只有国家代码,而不是对应的可读字符串。我不想要“GB”,我想要“英国”。


这在iOS 8.1模拟器上无法工作,请参考此帖子:https://dev59.com/eF8d5IYBdhLWcg3wnzVz - Muhammad Rizwan
6个回答

94

感谢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 3

的翻译是:

Swift 3

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

你可能想要使用 countryArray.count 的容量来初始化 sortedCountryArray - DeFrenZ

38

使用[[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode](其中countryCode是您的国家代码列表中的项目)获取用户当前区域设置下的国家名称。


15

你可能需要定义本地化(locale)..
而且有太多自动释放的内存,这可能是关键的,你永远不知道。因此,在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:)];

3

Swift 3

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

0
基本上与上面的答案相同,只是使用 flatMap 更短更快。
let locale = NSLocale.currentLocale()
var countries = NSLocale.ISOCountryCodes().flatMap { countryCode in
    return locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
}
countries.sortInPlace()

-1

在playgrounds上成功运行了这个

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接