2012-11-13 37 views
6

我使用CLGeocoder从经度/纬度解码CLLocation来放置名称。它工作正常。但是还有一件事让我困扰。当我将设备设置语言为英语,下面的代码的结果:CLPlacemark.locality,如果设备语言不同,则值发生变化

- (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]; 

}

以英文显示,如:成都。

当我更改设备的语言对中国

placemarker.locality 

返回中国的字符值。

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

回答

13

通常,混淆用户区域不是一个好习惯。如果设备语言设置为中文是因为用户想要阅读中文字符,为什么当他已经告诉你他想要中文时,他想用英文显示他?

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

这样:

无论如何,如果您有任何理由需要强制英语,你可以调用地理编码方法之前诱骗它使用standardUserDefaults第一语言,所以你可以做这样的事情的地理编码器,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"]; 

正如我说,你应该认真考虑为什么你需要这个,但如果你真的需要这个,那会工作。

+1

试过这个解决方案,但它不适用于iOS 9或是因为模拟器。让我知道是否有人知道任何解决方法。 –

+0

它也不适用于我.. @MohammadAshrafulKabir你有任何更新吗? – Akshay

+0

@Akshay没有更新从我身边 –

4

我找到了一个很好的解决方案

NSString *country = placemark.ISOcountryCode; 

这将返回精确国家不管你的locale是。例如,国家将是@“美国”而不是“美国”

相关问题