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

    return countryName; 
} 

countryName nil. Tại sao?xcode 6.1 iOS 8.1 NSLocale displayNameForKey NSLocaleIdentifier return nil

+0

Vấn đề: http://stackoverflow.com/questions/26603766/swift-nslocale-simulator-ios-8 –

+1

Vấn đề này chỉ mô phỏng. Tôi đã thử nghiệm nó trên một thiết bị ngày hôm nay, tôi nhận được tên quốc gia chính xác. –

+0

chỉ cần chạy vào vấn đề này bản thân mình trên simulators - Tôi cư một tableview với một danh sách của tất cả các nước và trong giả lập nó chỉ bị rơi do displayNameForKey trở về null. Tôi đã thử nó trên tất cả các thiết bị mô phỏng với 8.1 và tất cả chúng sụp đổ. iPhone4 và iPhone 5 mô phỏng với iOS 7.1 chạy tốt. Mã của tôi cũng chạy tốt trên các thiết bị vật lý iPhone4 và iPhone5 với 8.1 cài đặt vì vậy tôi đoán nó chỉ là một lỗi Xcode. giải pháp - cho đến khi sửa chữa táo, thử nghiệm trên thiết bị - đó là một bugger như tôi không có 6 và 6 cộng với tay: ( – SimonTheDiver

Trả lời

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

Tôi không hiểu tại sao [[NSLocale currentLocale] displayNameForKey...] không trả lại tên quốc gia trong iOS 8 nhưng các mã trên nên giải quyết vấn đề của bạn.

+0

Rõ ràng là trả về tên ngôn ngữ (tiếng Pháp, tiếng Đức ...), không phải là quốc gia. –

+2

Yeh, không hoạt động trên đầu của tôi ... cho mã quốc gia "Hoa Kỳ", tôi nhận được mã nhận dạng "_US", kết quả là tên quốc gia, số – Zorayr

+0

Giải pháp đang hoạt động, bạn chỉ cần sử dụng 'NSLocaleCountryCode' thay vì 'NSLocaleIdentifier' – HiveHicks

20

Đây là sự cố đã biết của Apple dành cho trình mô phỏng iOS 8.1 chỉ - không thể sao chép trên thiết bị 8.1. Xem dưới đây mô tả vấn đề từ Xcode ghi chú 6.1 phát hành:

Localization và cài đặt Bàn phím (bao gồm cả bàn phím bên thứ 3) đều được không được tôn trọng một cách chính xác bằng Safari, Google Maps và ứng dụng phát triển trong iOS 8.1 Simulator. [NSLocale currentLocale] trả về en_US và chỉ có sẵn bàn phím tiếng Anh và Biểu tượng cảm xúc. (18418630, 18512161).

Xem Xcode 6.1 Release Notes để biết thêm chi tiết.

7

Vui lòng thử mã dưới đây, mã sẽ hoạt động. Tôi đã thử nó trên điện thoại của tôi cũng như mô phỏng 8,1

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

này làm việc cho tôi

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

Nhãn hiệu: Dòng đầu tiên của bạn chứa mã dự phòng. Bạn có thể rút ngắn mã này thành NSLocale * currentLocale = [NSLocale currentLocale]; – JonEasy

0

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

Các vấn đề liên quan