gpt4 book ai didi

ios - CLPlacemark.locality,如果设备语言不同,值会改变

转载 作者:可可西里 更新时间:2023-11-01 03:25:56 24 4
gpt4 key购买 nike

我使用 CLGeocoder 将 CLLocation 从经度/纬度解码为地名。它工作正常。但是还有一件事困扰着我。当我将设备语言设置为英语时,以下代码的结果:

- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation{
/* We received the new location */
NSLog(@"Latitude = %f", newLocation.coordinate.latitude);
NSLog(@"Longitude = %f", newLocation.coordinate.longitude);
[self.geoCoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray* placemarks, NSError* error){
MKPlacemark *placemarker = [placemarks objectAtIndex:0];
NSLog(@"%@",placemarker.locality);
}];
[self.locationManager stopUpdatingLocation];

显示为英文,如:chengdu。

当我将设备语言更改为中文时,

placemarker.locality

返回一个汉字值。

但我真正想要的是它总是返回一个英文字符值(没有中文字符值)。我想这与语言环境有关。任何人都可以帮忙吗?谢谢。

最佳答案

通常,混淆用户区域设置不是一个好习惯。如果设备语言设置为中文是因为用户想要阅读汉字,为什么他已经告诉你他要中文了,你还要给他看英文呢?

无论如何,如果出于任何原因你需要强制使用英语,你可以欺骗使用 standardUserDefaults 第一语言的 geoCoder,这样你就可以在调用 geoCoder 方法之前做这样的事情:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"];

这样,geoCoder 将为您提供英文的所有信息。

但是,这会改变用户偏好,因此这是让他们回到原来位置的最佳方法:

NSMutableArray *userDefaultLanguages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"];

[self.geoCoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray* placemarks, NSError* error){
MKPlacemark *placemarker = [placemarks objectAtIndex:0];
NSLog(@"%@",placemarker.locality);
}];

[[NSUserDefaults standardUserDefaults] setObject:userDefaultLanguages forKey:@"AppleLanguages"];

正如我所说,您应该认真考虑为什么需要这个,但如果您真的需要这个,那也行。

关于ios - CLPlacemark.locality,如果设备语言不同,值会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13359152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com