ios objective-c nslocale

xcode 6.1 iOS 8.1 NSLocale displayNameForKey NSLocaleIdentifier return nil



objective-c (5)

Este es un problema conocido de Apple solo para el simulador iOS 8.1, no reproducible en dispositivos 8.1. Vea a continuación la descripción del problema de las notas de lanzamiento de Xcode 6.1:

Las configuraciones de localización y teclado (incluidos los teclados de terceros) no se respetan correctamente en Safari, Maps y las aplicaciones de desarrollador en el simulador iOS 8.1. [NSLocale currentLocale] devuelve en_US y solo están disponibles los teclados Inglés y Emoji. (18418630, 18512161).

Vea las Notas de lanzamiento de Xcode 6.1 para más detalles.

- (NSString *)countryNameByCode:(NSString*)countryCode { NSString *identifier = [NSLocale localeIdentifierFromComponents:@{NSLocaleCountryCode: countryCode}]; NSString *countryName = [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:identifier]; return countryName; }

Esto devolvió nil . ¿Por qué?


Esto funciona para mi

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


Por favor intente código debajo, debería funcionar. Lo probé en mi dispositivo así como en el simulador 8.1.

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


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

No entiendo por qué [[NSLocale currentLocale] displayNameForKey...] no devuelve el nombre del país en iOS 8 pero el código anterior debe resolver su problema.


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