2017-01-27 8 views
2

Я работаю над приложением, которое запрашивает у пользователей номер телефона и имеет выбор страны, где пользователь должен ввести код страны.Определите код страны для iOS в регионе «Европа»

Но при тестировании значений кода нулевой страны я узнал, что каким-то образом мой iPhone с iOS 10.2.1 имеет формат региона, который установлен в Европа.

Регион Европы не существует в списке регионов, когда я его ищу.

Когда я пытаюсь получить текущий код локали страна

NSLocale *currentLocale = [NSLocale currentLocale]; 
return [currentLocale objectForKey:NSLocaleCountryCode] 

я получаю en_150 который не является полезным для определения страны пользователя, по крайней мере, на моем устройстве. Код страны с возвратом , которого нет.

Я нашел обходной путь, чтобы найти для кода страны с помощью CTTelephonyNetworkInfo

if(![currentLocale objectForKey:NSLocaleCountryCode]) { 
    CTCarrier *carrier = [[CTTelephonyNetworkInfo new] subscriberCellularProvider]; 
    NSString *countryCode = carrier.isoCountryCode; 

    return [countryCode capitalizedString]; 
} 

Но как это работает с этой местности Европы и почему у меня это набор, как это?

ответ

1

Прежде всего, Европа - это континент, а не страна. Он не имеет кода страны. Однако он имеет код региона. Этот код региона действительно 150.

Континенты имеют числовые коды областей, а не 001 для «Мира» и 150 для «Европы».

Обязательно прочитайте мою статью «Are there standard language codes for ‘World English’ and ‘European English’», чтобы получить более подробное объяснение. Эти коды основаны на UN M.49, который является основой для ISO 3166, который является стандартом, о котором вы, вероятно, думаете, когда говорите «коды стран».

Проблема, с которой вы сталкиваетесь, заключается в том, что вы не можете использовать чей-то язык или параметры форматирования, чтобы определить их физическое местоположение. Локаль моего текущего устройства - en_DK, но мое физическое местоположение НЕТ. Многие устройства по умолчанию для en_US и пользователи по всему миру никогда не меняют настройки по умолчанию.

Пожалуйста, используйте CoreLocation для автоматического определения местоположения пользователя или просто попросите пользователя раскрыть свое местоположение.