我有一个菜单让用户选择一个国家.与地址字段中的contacts.app国家/地区菜单中的内容完全相同.
有谁知道获取国家列表的简单方法?我已经使用NSLocale来生成一系列国家,但遗憾的是它只是国家代码而不是人类可读的等价物.我不想'GB'我想要英国.
谢谢你.
如果有人感兴趣或想要找到相同的解决方案,这里是我的代码,用于排序的国家/地区.
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()
使用[[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode]
(其中countryCode是国家/地区代码列表中的项目)可以在用户的当前区域设置中获取国家/地区的名称.
您可能想要定义区域设置..
并且有太多自动释放的内存,这可能是关键的,您永远不会知道.所以在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:)];