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

    return countryName; 
} 

countryName 아니요. 왜? [[NSLocale currentLocale] displayNameForKey...]iOS 8에 국가 이름을 반환하지 않습니다하지만 위의 코드 문제를 해결해야하는 이유xcode 6.1 iOS 8.1 NSLocale displayNameForKey NSLocaleIdentifier return nil

+0

문제 : http://stackoverflow.com/questions/26603766/swift-nslocale-simulator-ios-8 –

+1

이 문제는 시뮬레이터에서만 발생합니다. 나는 오늘 장치에 그것을 시험했다, 나는 정확한 나라 이름을 얻는다. –

+0

이 시뮬레이터에서이 문제를 직접 만났습니다. 모든 국가의 목록이있는 테이블 뷰를 채우고 시뮬레이터에서 null을 반환하는 displayNameForKey로 인해 충돌이 발생했습니다. 나는 8.1로 모든 시뮬레이터 장치에서 그것을 시험해 보았고 모두 충돌했다. iOS 7.1이 적용된 iPhone4 및 iPhone 5 시뮬레이터가 올바르게 실행됩니다. 내 코드는 또한 실제 장치에서 실행됩니다. iPhone4s 및 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; 
} 

는 이해가 안 돼요.

+0

분명히 그 나라가 아니라 언어 이름 (프랑스어, 독일어 ...)을 반환합니다. –

+2

예, 국가 코드 "US"의 경우 국가 번호가 "_US"인 식별자를 얻습니다. – Zorayr

+0

해결책이 작동 중이며 'NSLocaleCountryCode'를 사용해야합니다. 'NSLocaleIdentifier' 대신 – HiveHicks

20

이것은 iOS 8.1에 대한 Apple의 알려진 문제점입니다. 시뮬레이터 - 8.1 디바이스에서는 재생산 할 수 없습니다. 엑스 코드 6.1 릴리스 노트에서 문제 설명 아래 참조 :

현지화 및 (제 3 자 키보드 포함) 키보드 설정이 올바르게 아이폰 OS 8.1 시뮬레이터 사파리,지도, 및 개발자 앱 영광되지 않습니다. [NSLocale currentLocale]은 en_US을 반환하며 영어 및 이모티콘 키보드 만 사용할 수 있습니다. (18418630, 18512161).

자세한 내용은 Xcode 6.1 Release Notes을 참조하십시오.

7

아래 코드를 시도해보십시오, 작동해야합니다. 나는 시뮬레이터뿐만 아니라 내 장치에 그것을 시도이 나를

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

* 언어 = [[NSLocale preferredLanguages] objectAtIndex : 0];

+0

사이드 마크 : 첫 줄에 중복 코드가 포함되어 있습니다. NSLocale * currentLocale = [NSLocale currentLocale]; – JonEasy

0

있는 NSString 작동 8.1

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