IPhone, Obținerea unei liste de țări într-un NSArray

voturi
42

Am un meniu care va permite unui utilizator să selectați o țară. Exact ca și faptul că, în meniul țară contacts.app în câmpul de adresă.

Stie cineva o modalitate simplă de a obține o listă a țărilor? Am folosit NSLocale pentru a genera o serie de țări, dar este doar codurile de țară, din păcate, și nu echivalentul uman poate fi citit. Nu vreau „GB“ Vreau Marea Britanie.

Întrebat 02/02/2009 la 11:22
sursa de către utilizator
În alte limbi...                            


6 răspunsuri

voturi
92

Multumesc Chuck.

Dacă cineva este interesat sau a vrut să găsească aceeași soluție aici este codul meu pentru o gamă sortat de țări.

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

Rapid:

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()
Publicat 02/02/2009 la 12:09
sursa de către utilizator

voturi
38

Utilizați [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode]( în cazul în care codȚară este un element din lista de coduri de țară) pentru a obține numele țării în limba curentă a utilizatorului.

Publicat 02/02/2009 la 12:04
sursa de către utilizator

voturi
15

S-ar putea dori să definiți locale ..
și există memorie prea mult autoreleased, care ar putea fi critice, voi ști niciodată. deci create pool autoreleased interior pentru bucla de asemenea. Am acest lucru:

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:)];
Publicat 07/04/2010 la 11:37
sursa de către utilizator

voturi
2

Swift 3

let locale = Locale.current
let countries = Locale.isoRegionCodes.map {
    locale.localizedString(forRegionCode: $0)!
}.sorted()
Publicat 13/10/2016 la 06:07
sursa de către utilizator

voturi
0

Sa aceasta lucru pe terenurile de joacă

let locale = NSLocale(localeIdentifier: "FI")
let unsortedCountries = NSLocale.isoCountryCodes.flatMap { locale.localizedString(forCountryCode: $0) }
let sortedCountries = unsortedCountries.sorted()
Publicat 13/09/2017 la 07:48
sursa de către utilizator

voturi
0

Destul de mult același răspuns ca mai sus, doar folosește flatMappentru a fi mai scurte și swiftier.

let locale = NSLocale.currentLocale()
var countries = NSLocale.ISOCountryCodes().flatMap { countryCode in
    return locale.displayNameForKey(NSLocaleCountryCode, value: countryCode)
}
countries.sortInPlace()
Publicat 13/05/2016 la 14:49
sursa de către utilizator

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