2009-02-02 16 views
42

में देशों की एक सूची प्राप्त करना मेरे पास एक मेनू है जो उपयोगकर्ता को देश का चयन करने देता है। पता फ़ील्ड में संपर्क.एप देश मेनू में बिल्कुल इसी तरह।आईफोन, एनएसएआरएआर

क्या किसी को भी देशों की सूची प्राप्त करने का एक आसान तरीका पता है? मैंने देशों की एक सरणी उत्पन्न करने के लिए एनएसएलोकेल का उपयोग किया है, लेकिन यह दुर्भाग्य से देश कोड है और मानव पठनीय समकक्ष नहीं है। मैं नहीं चाहता कि 'जीबी' मैं ग्रेट ब्रिटेन चाहता हूं।

+0

इस पर काम कर रहे: - http://stackoverflow.com/प्रश्न/26613011/xcode-6-1-ios-8-1-nslocale-displaynameforkey-nslocaleidentifier-return-nil –

उत्तर

38

उपयोगकर्ता के वर्तमान लोकेल में देश का नाम प्राप्त करने के लिए [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode] (जहां देश कोड देश कोडों की सूची में एक आइटम है) का उपयोग करें।

90

धन्यवाद चक।

यदि कोई दिलचस्पी है या एक ही समाधान ढूंढना चाहता है तो यहां देशों के एक क्रमबद्ध सरणी के लिए मेरा कोड है।

ऑब्जेक्टिव-सी:

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() 
+0

आप 'sortedCountryArray' को 'countryArr' की क्षमता के साथ प्रारंभ करना चाहेंगे ay.count'। – DeFrenZ

15

आप लो निर्धारित कर सकते हैं काले ..
और बहुत अधिक आत्मनिर्भर स्मृति है, जो महत्वपूर्ण हो सकती है, आप कभी नहीं जानते। तो लूप के अंदर भी ऑटोरेलेज्ड पूल बनाएं। मैं इस है:

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

सुंदर ज्यादा एक ही जवाब के रूप में ऊपर, बस flatMap का उपयोग करता है छोटे और swiftier किया जाना है।

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

स्विफ्ट 3

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

गया यह एक आईओएस 8.1 के साथ काम नहीं कर रहा सिम्युलेटर इस पोस्ट को देख खेल के मैदानों

let locale = NSLocale(localeIdentifier: "FI") 
let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) } 
let sortedCountries = unsortedCountries.sorted() 
संबंधित मुद्दे