Ios Iphone,获取NSArray中的国家列表
我有一个菜单,让用户选择一个国家。与地址字段中contacts.app country菜单中的完全相同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是国家代码列表中的一项)在用户的当前地区中获
有人知道一个简单的方法来获得一份国家名单吗?我使用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模拟器。请参阅以下文章:-