2009-02-02 38 views
42

Tôi có một trình đơn cho phép người dùng chọn quốc gia. Chính xác như vậy trong menu quốc gia contacts.app trong trường địa chỉ.Iphone, Lấy danh sách các quốc gia trong NSArray

Có ai biết cách nhận danh sách quốc gia đơn giản không? Tôi đã sử dụng NSLocale để tạo ra một loạt các quốc gia nhưng nó chỉ là mã quốc gia không may và không phải là tương đương có thể đọc được của con người. Tôi không muốn 'GB' tôi muốn nước Anh.

+0

này không hoạt động với iOS 8.1 Simulator xem bài này: - http://stackoverflow.com/questions/26613011/xcode-6-1-ios-8-1-nslocale-displaynameforkey-nslocaleidentifier-return-nil –

Trả lời

38

Sử dụng [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode] (trong đó mã quốc gia là một mục trong danh sách mã quốc gia của bạn) để lấy tên quốc gia bằng ngôn ngữ hiện tại của người dùng.

90

Cảm ơn chuck.

Nếu có ai quan tâm hoặc muốn tìm giải pháp tương tự ở đây là mã của tôi cho một loạt các quốc gia được sắp xếp.

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

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

Bạn có thể muốn khởi tạo 'selectedCountryArray' với dung lượng' countryArr ay.count'. – DeFrenZ

15

Bạn có thể muốn xác định lo cale ..
và có quá nhiều bộ nhớ tự động, điều này có thể rất quan trọng, bạn không bao giờ biết. do đó, tạo hồ bơi tự động phát triển bên trong vòng lặp for. Tôi đã này:

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

Khá nhiều câu trả lời tương tự như trên, chỉ cần sử dụng flatMap là ngắn hơn và swiftier.

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

Swift 3

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

Chấn này làm việc trên sân chơi

let locale = NSLocale(localeIdentifier: "FI") 
let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) } 
let sortedCountries = unsortedCountries.sorted() 
Các vấn đề liên quan