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

    return countryName; 
} 

countryName null. Warum?xcode 6.1 iOS 8.1 NSLocale displayNameForKey NSLocaleIdentifier return nil

+0

Es Problem: http://stackoverflow.com/questions/26603766/swift-nslocale-simulator-ios-8 –

+1

Dieses Problem nur Simulator. Ich habe es heute auf einem Gerät getestet, ich bekomme den richtigen Ländernamen. –

+0

lief gerade in den Simulatoren auf dieses Problem - ich bevölkerte eine Tabellenansicht mit einer Liste aller Länder und im Simulator stürzte es gerade ab, weil displayNameForKey null zurückgab. Ich habe es auf allen Simulatoren mit 8.1 ausprobiert und alle stürzen ab. iPhone4 und iPhone 5 Simulatoren mit iOS 7.1 laufen gut. Mein Code läuft auch gut auf physischen Geräten iPhone4s und iPhone5 mit 8.1 installiert, so dass ich denke, es ist nur ein Xcode Bug. Lösung - bis Apple Fix, Test auf dem Gerät - das ist ein bugger, wie ich nicht 6 und 6 plus zur Hand :( – SimonTheDiver

Antwort

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; 
} 

Ich verstehe nicht, warum [[NSLocale currentLocale] displayNameForKey...] nicht Ländernamen in iOS 8 aber der Code oben zurückkehren sollte Ihr Problem lösen.

+0

Offenbar gibt das den Namen der Sprache zurück (Französisch, Deutsch ...), nicht das Land. –

+2

Yeh, funktioniert nicht an meinem Ende entweder ... für Ländercode "US", bekomme ich eine Kennung, "_US" was zu einem Ländernamen führt, – Zorayr

+0

Die Lösung funktioniert, Sie müssen nur 'NSLocaleCountryCode' verwenden anstelle von 'NSLocaleIdentifier' – HiveHicks

20

Dies ist ein bekanntes Apple-Problem für iOS 8.1 Simulator nur - nicht reproduzierbar auf 8.1-Geräten. Siehe unten Ausgabe Beschreibung von Xcode 6.1 Release Notes:

Lokalisierung und Tastatureinstellungen (einschließlich 3rd-Party-Tastaturen) sind nicht richtig geehrt durch Safari, Maps und Entwickler Apps im iOS 8.1 Simulator. [NSLocale currentLocale] gibt en_US zurück und nur die englischen und Emoji-Tastaturen sind verfügbar. (18418630, 18512161).

Weitere Details finden Sie unter Xcode 6.1 Release Notes.

7

Bitte versuchen Sie unten Code, es sollte funktionieren. Ich versuchte es auf meinem Gerät sowie Simulator 8,1

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

Das ist für mich

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: Ihre erste Zeile enthält redundanten Code Sie könnten sie auf NSLocale * currentLocale = [NSLocale currentLocale]; – JonEasy

0

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

Verwandte Themen