需要在定位前后對系統語言進行轉換:
#pragma mark - CLLocationManagerDelegate - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{ //獲取用戶位置 CLLocation *location = [locations lastObject]; //停止定位 [_locationManager stopUpdatingLocation]; //當定位成功后,如果horizontalAccuracy大於0,說明定位有效 if (location.horizontalAccuracy < 0) { return; } //系統語言為英文時返回中文編碼 NSMutableArray *defaultLanguages = [LRH_USERDEFAULT objectForKey:@"AppleLanguages"]; [LRH_USERDEFAULT setObject:[NSArray arrayWithObjects:@"zh-hans",nil] forKey:@"AppleLanguages"]; //逆地理編碼 CLGeocoder *geocoder = [[CLGeocoder alloc]init]; __weak typeof(self) weakSelf = self; [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) { NSString *cityName = @""; if (error) { LRHLog(@"沒有找到此經緯度的地理信息"); } else { CLPlacemark *pmark = [placemarks firstObject]; cityName = pmark.locality; } if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(getLocationCityWith:withCityName:)]) { [weakSelf.delegate getLocationCityWith:self withCityName:cityName]; } //還原系統語言 [LRH_USERDEFAULT setObject:defaultLanguages forKey:@"AppleLanguages"]; }]; }
自己寫的一個定位管理類:

// // LRHLocationUtils.h // LRHAPP // // Created by ZY on 2017/4/6. // Copyright © 2017年 Vision Credit Ltd. All rights reserved. // #import <Foundation/Foundation.h> @class LRHLocationUtils; @protocol LRHLocationUtilsDelegate <NSObject> - (void)getLocationCityWith:(LRHLocationUtils *)locationUtils withCityName:(NSString *)cityName; @end @interface LRHLocationUtils : NSObject + (instancetype)shareManager; @property (nonatomic,weak) id <LRHLocationUtilsDelegate>delegate; @property (nonatomic,copy) NSString *userCitys; //開始定位 - (void)startGetLocation; @end

// // LRHLocationUtils.m // LRHAPP // // Created by ZY on 2017/4/6. // Copyright © 2017年 Vision Credit Ltd. All rights reserved. // #import "LRHLocationUtils.h" #import <CoreLocation/CoreLocation.h> @interface LRHLocationUtils ()<CLLocationManagerDelegate> @property(nonatomic,strong)CLLocationManager *locationManager; @end @implementation LRHLocationUtils - (void)dealloc{ _locationManager.delegate = nil; } + (instancetype)shareManager{ static LRHLocationUtils *locationUtls = nil; static dispatch_once_t oncetoken; dispatch_once(&oncetoken, ^{ locationUtls = [[LRHLocationUtils alloc]init]; }); return locationUtls; } - (instancetype)init{ self = [super init]; if (self) { _locationManager = [[CLLocationManager alloc]init]; _locationManager.delegate = self; //設置定位精准度 _locationManager.desiredAccuracy = kCLLocationAccuracyKilometer; if ([_locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { //當用戶使用的時候授權 [_locationManager requestWhenInUseAuthorization]; } } return self; } #pragma mark - CLLocationManagerDelegate - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{ //獲取用戶位置 CLLocation *location = [locations lastObject]; //停止定位 [_locationManager stopUpdatingLocation]; //當定位成功后,如果horizontalAccuracy大於0,說明定位有效 if (location.horizontalAccuracy < 0) { return; } //系統語言為英文時返回中文編碼 NSMutableArray *defaultLanguages = [LRH_USERDEFAULT objectForKey:@"AppleLanguages"]; [LRH_USERDEFAULT setObject:[NSArray arrayWithObjects:@"zh-hans",nil] forKey:@"AppleLanguages"]; //逆地理編碼 CLGeocoder *geocoder = [[CLGeocoder alloc]init]; __weak typeof(self) weakSelf = self; [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) { NSString *cityName = @""; if (error) { LRHLog(@"沒有找到此經緯度的地理信息"); } else { CLPlacemark *pmark = [placemarks firstObject]; cityName = pmark.locality; } if (weakSelf.delegate && [weakSelf.delegate respondsToSelector:@selector(getLocationCityWith:withCityName:)]) { [weakSelf.delegate getLocationCityWith:self withCityName:cityName]; } //還原系統語言 [LRH_USERDEFAULT setObject:defaultLanguages forKey:@"AppleLanguages"]; }]; } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{ if (_delegate && [_delegate respondsToSelector:@selector(getLocationCityWith:withCityName:)]) { [_delegate getLocationCityWith:self withCityName:@""]; } } #pragma mark - private method - (void)startGetLocation{ [_locationManager startUpdatingLocation]; } @end