我正在开发一个应用程序,用于询问用户的电话号码并有一个国家/地区选择器,用户应在其中输入国家/地区代码。
但是在测试空国家/地区代码值时,我发现我的iOS 10.2.1的iPhone的区域格式设置为欧洲。
搜索时,区域列表中不存在欧洲区域。
当我尝试获取当前区域设置国家/地区代码时
NSLocale *currentLocale = [NSLocale currentLocale];
return [currentLocale objectForKey:NSLocaleCountryCode]
我得到的en_150
对于确定用户的国家/地区没有用,至少在我的设备上是这样。返回的国家/地区代码 150 ,但不存在。
我找到了一种解决方法,可以使用CTTelephonyNetworkInfo
if(![currentLocale objectForKey:NSLocaleCountryCode]) {
CTCarrier *carrier = [[CTTelephonyNetworkInfo new] subscriberCellularProvider];
NSString *countryCode = carrier.isoCountryCode;
return [countryCode capitalizedString];
}
但它如何与这个欧洲语言环境一起使用,为什么我这样设置呢?
答案 0 :(得分:1)
首先,欧洲是一个大陆,而不是一个国家。它没有国家/地区代码。但是,它有一个区域代码。该地区代码确实是150.
大陆有数字区域代码,而不是“世界”的001和“欧洲”的150。
请务必阅读我的文章“Are there standard language codes for ‘World English’ and ‘European English’”,以获得更详细的解释。这些代码基于UN M.49,它是ISO 3166的基础,这是您在说“国家代码”时可能会考虑的标准。
您遇到的问题是您无法使用某人的语言或格式首选项来确定其实际位置。我当前设备的区域设置是en_DK但我的物理位置是NO。许多设备默认为en_US,全世界的用户都不会更改默认设置。
请使用CoreLocation自动确定用户的位置,或者只是要求用户披露他们的位置。