2014-10-28 19 views
16
 
- (NSString *)countryNameByCode:(NSString*)countryCode 
{ 
    NSString *identifier = [NSLocale localeIdentifierFromComponents:@{NSLocaleCountryCode: countryCode}]; 
    NSString *countryName = [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:identifier]; 

    return countryName; 
} 

countryName nil. Perché?xcode 6.1 iOS 8.1 NSLocale displayNameForKey NSLocaleIdentificatore restituito nil

+0

problema It: http://stackoverflow.com/questions/26603766/swift-nslocale-simulator-ios-8 –

+1

Questo problema solo simulatore. L'ho provato su un dispositivo oggi, ottengo il nome corretto del paese. –

+0

mi sono appena imbattuto in questo problema sui simulatori - popolino una tableview con un elenco di tutti i paesi e nel simulatore si è appena bloccato a causa di displayNameForKey che restituisce null. L'ho provato su tutti i dispositivi di simulazione con 8.1 e tutti si sono bloccati. I simulatori iPhone4 e iPhone 5 con iOS 7.1 funzionano bene. Il mio codice funziona anche su dispositivi fisici iPhone4s e iPhone5 con 8.1 installati, quindi suppongo che sia un bug di Xcode. soluzione - fino a quando apple fix, test sul dispositivo - che è un bugger perché non ho 6 e 6 plus a mano :( – SimonTheDiver

risposta

0
- (NSString *)countryNameByCode:(NSString*)countryCode 
{ 
    NSString *identifier = [[NSLocale preferredLanguages] firstObject]; 
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:identifier]; 
    NSString *countryName = [locale displayNameForKey:NSLocaleIdentifier value:countryCode]; 
    return countryName; 
} 

non capisco il motivo per cui [[NSLocale currentLocale] displayNameForKey...] non restituisce il nome del paese in iOS 8 ma il codice di cui sopra dovrebbe risolvere il problema.

+0

Apparentemente questo restituisce il nome della lingua (francese, tedesco ...), non il paese. –

+2

Yeh, non funziona nemmeno sul mio terminale ... per il codice del paese "US", ottengo un identificatore, "_US" che risulta in un nome di paese, nil – Zorayr

+0

La soluzione funziona, è sufficiente utilizzare 'NSLocaleCountryCode' invece di 'NSLocaleIdentifier' – HiveHicks

20

Questo è un problema noto Apple per il simulatore di iOS 8.1 - non riproducibile su dispositivi 8.1. Vedi sotto descrizione problema da Xcode 6.1 note di rilascio:

La localizzazione e le impostazioni della tastiera (che comprende il 3 tastiere di partito) sono non onorati correttamente da Safari, Mappe, e le applicazioni degli sviluppatori nella iOS 8.1 Simulator. [NSLocale currentLocale] restituisce en_US e sono disponibili solo le tastiere inglese ed Emoji. (18418630, 18512161).

Vedere Xcode 6.1 Release Notes per ulteriori dettagli.

7

Si prega di provare sotto il codice, dovrebbe funzionare. Ho provato sul mio dispositivo così come simulatore di 8,1

- (NSString *)countryNameByCode:(NSString*)countryCode { 
    return [[NSLocale systemLocale] displayNameForKey:NSLocaleCountryCode value:countryCode]; 
} 
1

Questo funziona per me

NSLocale *currentLocale = [[NSLocale alloc] initWithLocaleIdentifier:[NSLocale currentLocale].localeIdentifier]; 

for (AVSpeechSynthesisVoice *voice in [AVSpeechSynthesisVoice speechVoices]) { 
      NSString *languageLocalised = [currentLocale displayNameForKey:NSLocaleIdentifier value:voice.language]; 
      NSLog(@"%@ displayNameForKey %@: %@", currentLocale.localeIdentifier, voice.language, languageLocalised); 
} 
+0

Sidemark: la prima riga contiene codice ridondante. Potresti accorciarlo a NSLocale * currentLocale = [NSLocale currentLocale]; – JonEasy

0

NSString * language = [[NSLocale preferredLanguages] objectAtIndex: 0];