iOS 系统语言导致定位反编码问题
2021-12-24 本文已影响0人
ShawnAlex
今天做项目突然发现App系统语言变了竟然会影响定位反编码信息, emmm.... -_-
问题场景:
以这段反编码代码举例
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
CLLocation *newLocation = locations[0];
// 获取当前所在的城市名
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
// 根据经纬度反向地理编译出地址信息
[geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *array, NSError *error){
if (array.count > 0){
CLPlacemark *placemark = [array objectAtIndex:0];
//获取城市
NSString *city = placemark.locality;
if (!city) {
//四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市)
city = placemark.administrativeArea;
}
NSLog(@"location -- 省:%@, 市:%@, 区:%@ 街道:%@", placemark.administrativeArea, city, placemark.subLocality, placemark.name);
}
}];
//系统会一直更新数据,直到选择停止更新,因为我们只需要获得一次经纬度即可,所以获取之后就停止更新
[manager stopUpdatingLocation];
}
ios系统为中文时
中文反编码反编码显示为中文信息
ios系统为英文/韩文..国际化语言时
image.png反编码显示为英文信息
这样的话有些情况下就会影响一些业务功能的实现
解决方法
关键代码
// 保存当前语言 (英文/韩文 ......)
NSMutableArray *defaultLanguages = [[NSUserDefaults standardUserDefaults]
objectForKey:@"AppleLanguages"];
// 强制成简体中文
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"zh-hans",nil] forKey:@"AppleLanguages"];
//还原之前设置的语言
[[NSUserDefaults standardUserDefaults] setObject: defaultLanguages forKey:@"AppleLanguages"];
设置位置
位置1
我们可以放在反编码位置
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
CLLocation *newLocation = locations[0];
// 停止位置更新
[manager stopUpdatingLocation];
// 保存
NSMutableArray *userDefaultLanguages = [[NSUserDefaults standardUserDefaults]
objectForKey:@"AppleLanguages"];
// 修改
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"zh-hans",nil]
forKey:@"AppleLanguages"];
// 逆地理编码
CLGeocoder * geoCoder = [[CLGeocoder alloc] init];
[geoCoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
if(!error){
for (CLPlacemark * placemark in placemarks) {
NSString *cityName = [placemark locality];
NSLog(@"cityName===》%@", cityName);//这里可看到输出为中文
break;
}
}
// 还原
[[NSUserDefaults standardUserDefaults] setObject:userDefaultLanguages forKey:@"AppleLanguages"];
}];
}
位置2
我们可以放在AppDelegate
中, 保证使用App整个过程都是简体中文
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"zh-hans",nil] forKey:@"AppleLanguages"];
return YES;
}