我正在尝试通过使用以下命令快速获得用户的区域代码3:
Locale.current.regionCode
不幸的是regionCode为nil,你知道为什么吗?我应该怎么做才能获得它?
非常感谢。
对于那些在模拟器中寻求解决方案的人,请转到“设置>常规>语言和地区”并更改地区。
它为我和其他人工作。由于一个奇怪的未知原因,某些模拟器直到该区域至少更改一次才返回该区域。
我不知道它是否也可以在真实设备上运行,因为我在真实设备上没有这个问题。
由于各种原因,Locale的许多属性在iOS(和Android)上可能返回nil。
您也可以使用objectForKey:NSLocaleCountryCode
查询国家代码。
// code may be nil
NSString *code = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode];
具有备用逻辑以通过CoreTelephony查找countryCode是一个好主意。
CTCarrier *carrier = [[CTTelephonyNetworkInfo new] subscriberCellularProvider];
NSString *countryCode = carrier.isoCountryCode;
或/并且使用反向地理编码:
// CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
__block CLLocation *location = [locations firstObject];
[[[CLGeocoder alloc] init] reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
if (!error && placemarks.count > 0) {
CLPlacemark *placemark = [placemarks firstObject];
// Use placemark.country;
// Use placemark.ISOCountryCode;
}
}
}
例如,在对应区域查询的Android版本上,对于Locale而言,对于许多有根设备而言,它为零。