15

我有一个错误报告,在以下行中说明了崩溃,其中客户端是NSMutableDictionary

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

我的猜测是,NSLocaleCountryCode这会在这一行中返回 nil,这会导致向 an 添加一个 nil 对象,NSDictionary这会导致崩溃。问题是,以前有人遇到过这样的问题吗?是否有任何理由NSLocaleCountryCode可以为零currentLocale?该文档没有说明返回 nil 值,我认为这将始终返回一个有效的国家/地区。

最好的问候,迈克尔

4

2 回答 2

16

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

Xcode 方案语言

于 2015-09-14T15:56:20.723 回答
10

还有其他人遇到过这个问题,什么时候NSLocale是“系统语言环境”。你需要在你的编码中更加防御,要么不填充密钥,nil要么使用[NSNull null]

NSLocale *locale = [NSLocale currentLocale];
NSString *country = [locale objectForKey:NSLocaleCountryCode];
if (country != nil)
{
    [client setObject:country forKey:@"country"];
}
于 2013-03-04T13:20:27.447 回答