Вот альтернативный, возможно, чрезмерно обходной метод. Другие решения основаны на ручных настройках (NSLocale) или на запросе разрешения на использование служб определения местоположения, которые могут быть отклонены (CLLocationManager), поэтому у них есть недостатки.
Вы можете получить текущую страну на основе местного часового пояса. Мое приложение взаимодействует с сервером, на котором работает Python, с установленным pytz, и этот модуль предоставляет словарь кодов стран для строк часовых поясов. Мне действительно нужно, чтобы сервер знал страну, поэтому мне не нужно настраивать его полностью на iOS. На стороне Python:
>>> import pytz
>>> for country, timezones in pytz.country_timezones.items():
... print country, timezones
...
BD ['Asia/Dhaka']
BE ['Europe/Brussels']
BF ['Africa/Ouagadougou']
BG ['Europe/Sofia']
BA ['Europe/Sarajevo']
BB ['America/Barbados']
WF ['Pacific/Wallis']
...
На стороне iOS:
NSTimeZone *tz = [NSTimeZone localTimeZone];
DLog(@"Local timezone: %@", tz.name); // prints "America/Los_Angeles"
Я отправил свой сервер с именем локального часового пояса и посмотрел его в словаре pytz country_timezones.
Если вы сделаете версию словаря для iOS доступной в pytz или другом источнике, вы можете использовать ее для немедленного просмотра кода страны без помощи сервера, основываясь на настройках часового пояса, которые часто бывают актуальными.
Возможно, я неправильно понимаю NSLocale. Дает ли он код страны через региональные настройки форматирования или настройки часового пояса? Если последнее, то это просто более сложный способ получить тот же результат ...