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

    return countryName; 
} 

странаName ноль. Зачем?xcode 6.1 iOS 8.1 NSLocale displayNameForKey NSLocaleIdentifier return noil

+0

Эта проблема: http://stackoverflow.com/questions/26603766/swift-nslocale-simulator-ios-8 –

+1

Эта проблема только в симуляторе. Я тестировал его на устройстве сегодня, я получаю правильное название страны. –

+0

просто наткнулся на эту проблему на симуляторах - я заполняю табличное представление со списком всех стран, а в симуляторе он просто разбился из-за того, что displayNameForKey вернул нуль. Я пробовал это на всех симуляторах с 8.1, и все они рушились. iPhone4 и iPhone 5 с iOS 7.1 работают нормально. Мой код также отлично работает на физических устройствах iPhone4 и iPhone5 с установленным 8.1, поэтому я предполагаю, что это просто ошибка Xcode. решение - до тех пор, пока яблоко не исправит ошибку, тест на устройстве - это ошибка, так как у меня нет 6 и 6 плюс :( – SimonTheDiver

ответ

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

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

+0

Очевидно, что возвращает название языка (французский, немецкий ...), а не страну. –

+2

Yeh, не работающий на моем конце ... для кода страны «US», я получаю идентификатор «_US», который приводит к названию страны, ноль. – Zorayr

+0

Решение работает, вам просто нужно использовать 'NSLocaleCountryCode' вместо 'NSLocaleIdentifier' – HiveHicks

20

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

Локализация и настройка клавиатуры (в том числе 3-клавишных партий) являются не правильно честь Safari, Карт и приложениями для разработчиков в IOS 8.1 Simulator. [NSLocale currentLocale] возвращает en_US и доступны только английские и Emoji клавиатуры. (18418630, 18512161).

См. Xcode 6.1 Release Notes для получения более подробной информации.

7

Пожалуйста, попробуйте код ниже, он должен работать. Я попробовал его на устройстве, а также имитатор 8,1

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

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

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: ваша первая строка содержит избыточный код. Вы можете сократить ее до NSLocale * currentLocale = [NSLocale currentLocale]; – JonEasy

0

NSString * язык = [[NSLocale preferredLanguages] objectAtIndex: 0];

Смежные вопросы