NSLocaleCountryCode返回nil。

15

我有一个错误报告,指出以下行中出现崩溃,其中client是NSMutableDictionary的实例。

[client setObject:[[NSLocale currentLocale] objectForKey:NSLocaleCountryCode] forKey:@"country"];

我的猜测是,在此行中,NSLocaleCountryCode返回nil,这将导致向NSDictionary添加一个nil对象,从而导致崩溃。问题是,是否有人遇到过类似的问题?是否有任何原因使得currentLocaleNSLocaleCountryCode可能为nil?文档没有说明返回nil值,我认为它应该始终返回有效的国家。
最好的问候, Michael

这是否发生在实际设备上还是在测试中?如果它只在测试期间发生,那可能就是 @olejnjak 在下面提到的问题。 - ThomasW
这在多个生产环境下真实设备上发生过。 - Michael Ochs
2个回答

17

我的情况是为了调试目的,在 Xcode 中运行方案时选择了自定义语言。我选择的是 EN,而不是系统语言。

Xcode scheme language


11

others人遇到了这个问题,当NSLocale是“系统区域设置”时。你需要在编程中更加谨慎,要么不填充键(key)如果它是nil,要么使用[NSNull null]

NSLocale *locale = [NSLocale currentLocale];
NSString *country = [locale objectForKey:NSLocaleCountryCode];
if (country != nil)
{
    [client setObject:country forKey:@"country"];
}

1
дҪ жңүе…ідәҺcurrentLocalе’ҢsystemLocaleдҪ•ж—¶зӣёзӯүзҡ„д»»дҪ•дҝЎжҒҜеҗ—пјҹ - Michael Ochs
我们从很多用户那里了解到了同样的问题。他们在更新我们的应用后遇到了这个问题。你听说过当前语言环境(currentLocale)因应用商店的应用更新而突然改变行为的情况吗? - nebillo
我在这里遇到了相同的问题,但我不知道是什么原因导致currentLocale没有国家代码。 - Jorge Vasquez
我曾经有一个客户因为同样的原因遇到了崩溃问题。上面的防御性编码修复了崩溃。但是后来我从客户那里了解到,iPad 的“常规 > 国际 > 区域格式”设置为“英语”,然而,当她点击更改区域格式时,“英语”不再是一个选项。这是在 iOS 6.1.3 下发生的。我认为“英语”不应该是一个选项,我的猜测是,苹果在某个时候进行了更改,将“英语”作为一个选项删除,保留了 iPad 上的值,并返回 NSLocaleCountryCode 的 nil 值。 - rene
6
这将重现空的国家代码: 设置 > 通用 > 国际 > 区域格式 > 世界语 - russau
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接