2012-11-13 27 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是。例如,國家將是@「美國」而不是「美國」

相關問題