为什么Xcode 6.1在IOS 8模拟器中杀死[NSLocale preferredLanguages]

时间:2014-10-27 21:46:31

标签: xcode6

昨天Xcode更新到v6.1。

现在,[NSLocale preferredLanguages]在iPhone中返回一个空数组,但仅适用于IOS 8 - 在iPhone 5和6模拟器中。 IOS 7模拟器仍然正常工作。

物理iPhone 6设备似乎没有受到影响 - 它只是模拟器。

通常的尝试 - 清理项目,重启Xcode,重启Mac - 没有任何区别。那么,什么是最好的策略 - 等待Xcode 6.1.1,或者向Apple列表(哪一个)发送投诉?

4 个答案:

答案 0 :(得分:7)

您可以按照here中的说明使用currentLocale方法调整类别。该类别允许一次性覆盖项目中所有目标的一般语言和区域设置。

您也可以单独使用每个目标的方案设置。 如果您的应用中有很多本地化,

enter image description here

您可以在每个目标的方案设置中更改Application languageApplication region。您甚至可以为每个本地化创建单独的目标,以便更快地进行语言测试。

Product -> Scheme -> Edit scheme...

enter image description here

答案 1 :(得分:0)

首先,他们是模拟器,而不是模拟器。其次,我没有看到在Xcode 6.1(6A1052c)和任何iOS 8.1模拟器下为[NSLocale preferredLanguages]返回一个空数组,但我总是看到"en"返回,无论系统设置中选择何种语言。正如您所注意到的,我确实看到了任何iOS 7模拟器的正确行为。

如果尚未提交错误,我会提交错误投诉:Changing language on iOS 8.1 simulator does not work的更多信息。

答案 2 :(得分:0)

我已经将此标记为愚蠢行为。全局首选项不适用于iOS 8.1模拟器。本地化就是这样的全球偏好。参见:

请参阅iOS8.1 Simulator always uses US keyboard layout despite german hardware keyboard

至于"策略" ...您可以注意到它是发行说明中记录的已知问题并等待修复,或者您可以在http://bugreport.apple.com提交雷达

答案 3 :(得分:0)

设定产品 - >方案 - >偏好...没有帮助我,所以我做了一个简单的解决方法:

NSString *language = [[NSLocale preferredLanguages] count] > 0 ? 
    [[NSLocale preferredLanguages] objectAtIndex:0] : 
    @"en";