【问题标题】:CLLocationManager reverseGeocodeLocation LanguageCLLocationManager reverseGeocodeLocation 语言
【发布时间】:2013-12-21 17:42:32
【问题描述】:

我在 iPhone 上使用 CLLocationManager 来获取当前用户位置,然后我使用 reverseGeocodeLocation 将位置转换为地址。

这工作正常,但结果以设备语言返回,我需要它们始终为英文。

有没有办法以所需语言获取地址字符串或对其进行转换?

    [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) {
        NSLog(@"Found placemarks: %@, error: %@", placemarks, error);
        if (error == nil && [placemarks count] > 0) {
            placemark = [placemarks lastObject];
    }

【问题讨论】:

    标签: ios xcode core-location


    【解决方案1】:

    我最终设法弄明白了,所以这也是为那些可能需要它的人准备的。

    1. 从 SUserDefaults standardUserDefaults 中获取“Ap​​pleLanguages”键并保存以备后用。
    2. 将“AppleLanguages 键设置为仅“en”
    3. 获取位置(现在只有英文)
    4. 恢复之前的“AppleLanguages”键。

    //1+2

    NSArray *currentLanguageArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
    [[NSUserDefaults standardUserDefaults] setObject: [NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"];
             //get the location
    

    //4

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

    希望有帮助

    【讨论】:

      【解决方案2】:

      CLGeocoder 为这种确切情况提供了一种方便的方法:

      - (void)reverseGeocodeLocation:(CLLocation *)location 
                     preferredLocale:(NSLocale *)locale 
                   completionHandler:(CLGeocodeCompletionHandler)completionHandler;
      

      适用于 iOS 11 及更高版本。

      【讨论】:

      • 斯威夫特:func reverseGeocodeLocation(_ location: CLLocation, preferredLocale locale: Locale?, completionHandler: @escaping CLGeocodeCompletionHandler)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 2014-11-15
      • 2019-06-25
      相关资源
      最近更新 更多