Ios Iphone,获取NSArray中的国家列表

Ios Iphone,获取NSArray中的国家列表,ios,objective-c,iphone,xcode,cocoa-touch,Ios,Objective C,Iphone,Xcode,Cocoa Touch,我有一个菜单,让用户选择一个国家。与地址字段中contacts.app country菜单中的完全相同 有人知道一个简单的方法来获得一份国家名单吗?我使用NSLocale生成了一系列国家,但不幸的是,这只是国家代码,而不是人类可读的等效代码。我不想要“GB”,我想要英国。使用[[NSLocale currentLocale]displayNameForKey:NSLocaleCountryCode值:countryCode](其中countryCode是国家代码列表中的一项)在用户的当前地区中获

我有一个菜单,让用户选择一个国家。与地址字段中contacts.app country菜单中的完全相同


有人知道一个简单的方法来获得一份国家名单吗?我使用NSLocale生成了一系列国家,但不幸的是,这只是国家代码,而不是人类可读的等效代码。我不想要“GB”,我想要英国。

使用
[[NSLocale currentLocale]displayNameForKey:NSLocaleCountryCode值:countryCode]
(其中countryCode是国家代码列表中的一项)在用户的当前地区中获取国家名称。

谢谢chuck

如果有人感兴趣或想找到相同的解决方案,这里是我的代码,用于排序的国家数组

目标-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, <)
Swift:

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

您可能需要定义区域设置..
而且有太多的自动释放内存,这可能是至关重要的,你们永远不知道。因此,也可以在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:)];

与上面的答案基本相同,只是使用
flatMap
来缩短和快速

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

Swift 3

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

让这个在操场上工作

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

您可能希望使用countryArray.count的容量初始化sortedCountryArray。这不适用于iOS 8.1模拟器。请参阅以下文章:-