Iphone, megszerzése országok listája, egy NSArray

szavazat
42

Van egy menü, amely hagyja, hogy ez a felhasználó kiválaszt egy országot. Pontosan úgy a contacts.app ország menüt a cím mezőt.

Tudja valaki, hogy egy egyszerű módja annak, hogy az országok listáját? Én használtam NSLocale generálni egy sor országban, de ez csak az országkódok sajnos, és nem az ember által olvasható egyenértékű. Nem akarok „GB” szeretnék Nagy-Britanniában.

A kérdést 02/02/2009 11:22
a forrás felhasználó
Más nyelveken...                            


6 válasz

szavazat
92

Köszönöm Chuck.

Ha valaki érdeklődik, vagy akart találni ugyanazt a megoldást itt van a kód a rendezett tömbben országban.

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

Gyors:

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()
Válaszolt 02/02/2009 12:09
a forrás felhasználó

szavazat
38

Használja [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode](ahol országkód egy elemet a országkódok listájában), hogy az ország nevét a felhasználó aktuális locale.

Válaszolt 02/02/2009 12:04
a forrás felhasználó

szavazat
15

Érdemes meghatározni locale ..
és túl sok autoreleased memória, amely kritikus lehet, ti soha nem lehet tudni. így létre autoreleased medence belsejében a hurok is. Nekem ez:

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:)];
Válaszolt 07/04/2010 11:37
a forrás felhasználó

szavazat
2

Swift 3

let locale = Locale.current
let countries = Locale.isoRegionCodes.map {
    locale.localizedString(forRegionCode: $0)!
}.sorted()
Válaszolt 13/10/2016 06:07
a forrás felhasználó

szavazat
0

Van ez az egyik dolgozó játszóterek

let locale = NSLocale(localeIdentifier: "FI")
let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) }
let sortedCountries = unsortedCountries.sorted()
Válaszolt 13/09/2017 07:48
a forrás felhasználó

szavazat
0

Nagyjából ugyanaz a válasz, mint fent, csak használja flatMap, hogy rövidebb és swiftier.

let locale = NSLocale.currentLocale()
var countries = NSLocale.ISOCountryCodes().flatMap { countryCode in
    return locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
}
countries.sortInPlace()
Válaszolt 13/05/2016 14:49
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more