Подтвердить что ты не робот

Xcode 6.1 iOS 8.1 NSLocale displayNameForKey NSLocaleIdentifier возвращает ноль

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

    return countryName;
}

countryName no. Почему?

4b9b3361

Ответ 1

Это известная проблема Apple для симулятора iOS 8.1 - не воспроизводится на 8.1 устройствах. См. Ниже описание проблемы из примечаний к выпуску Xcode 6.1:

Настройки локализации и клавиатуры (включая сторонние клавиатуры) неправильно соблюдены Safari, Maps и приложения для разработчиков в iOS 8.1. Симулятор. [NSLocale currentLocale] возвращает en_US, и доступны только английские и Emoji клавиатуры. (18418630, 18512161).

Подробнее см. Примечания к выпуску Xcode 6.1.

Ответ 2

Пожалуйста, попробуйте код ниже, он должен работать. Я попробовал это на своем устройстве, а также симулятор 8.1

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

Ответ 3

Это работает для меня

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

Ответ 4

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

Я не понимаю, почему [[NSLocale currentLocale] displayNameForKey...] не возвращает имя страны в iOS 8, но приведенный выше код должен решить вашу проблему.

Ответ 5

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