NSLocaleCountryCode возвращает ноль

У меня есть отчет об ошибке, который сообщает о сбое в следующей строке, где клиент является экземпляром NSMutableDictionary

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

Я думаю, что NSLocaleCountryCode возвращает ноль в этой строке, что приводит к добавлению объекта ноль в NSDictionary что приведет к аварии. Вопрос в том, сталкивался ли кто-нибудь с подобной проблемой раньше? Есть ли причины NSLocaleCountryCode может быть ноль для currentLocale? В документации ничего не говорится о возврате нулевого значения, и я думал, что это всегда вернет действительную страну.

С наилучшими пожеланиями, Майкл

2 ответа

Решение

Есть другие, кто сталкивался с этой проблемой, когда NSLocale это "язык системы". Вы должны быть более оборонительными в своем кодировании, либо не заполняя ключ, если он nil или используя [NSNull null]:

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

Мой случай состоял в том, что для целей отладки я выбрал собственный язык в схеме запуска в XCode. У меня был EN, а не системный язык.

Язык схемы XCode

Другие вопросы по тегам