Iphone,获取NSArray国家名单

我有一个让用户select一个国家的菜单。 与地址栏中的contacts.app国家/地区菜单完全一样。

有谁知道一个简单的方法来获得国家名单? 我已经使用NSLocale来生成一个国家的数组,但不幸的是只有国家代码,而不是人类可读的等价物。 我不要'GB'我想要英国。

使用[[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode] (其中countryCode是国家/地区代码列表中的项目)以获取用户当前语言环境中的国家/地区名称。

谢谢你。

如果任何人有兴趣或想find相同的解决scheme这里是我的代码sorting的国家数组。

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

Swift 3

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

你可能想要定义区域设置..
而且有太多的autoreleased记忆,这可能是至关重要的,你永远不知道。 所以在for循环中创buildautoreleased池。 我有这个:

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

Swift 3

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

几乎和上面的答案一样,只是使用flatMap更短,更快捷。

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

得到这个在操场上工作

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