【问题标题】:NSLocaleCountryCode returns nilNSLocaleCountryCode 返回 nil
【发布时间】:2013-02-18 14:15:23
【问题描述】:

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

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

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

最好的问候, 迈克尔

【问题讨论】:

  • 这是发生在实际设备上还是在测试中?如果它只发生在测试期间,它可能是@olejnjak 在下面提到的。
  • 这发生在生产中的多个真实设备上。

标签: ios foundation country nslocale


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    NSLocale 是“系统区域设置”时,有others 遇到了这个问题。你需要在你的编码中更加防御,如果它是nil,则不填充密钥或使用[NSNull null]

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

    【讨论】:

    • 您是否知道在什么情况下currentLocal 将等于systemLocale
    • 不,我不知道,但很明显,有时国家代码并不总是填充,因此在最终字典中需要是可选的。
    • 我们的许多用户都在同一问题上获得了经验。他们在更新我们的应用程序后遇到了这个问题。您是否听说过 currentLocale 会因应用商店的应用更新而突然改变行为?
    • 我在这里遇到了同样的问题,我不知道是什么导致currentLocale 没有国家/地区代码。
    • 这将重现 nil 国家代码:设置 > 常规 > 国际 > 区域格式 > 世界语
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 2017-12-16
    • 2014-09-27
    • 2017-06-11
    • 2014-12-29
    • 2019-03-14
    • 2016-06-16
    相关资源
    最近更新 更多