2012-11-13 4 views
6

Ich benutze CLGeocoder, um den CLLocation von Länge/Breite zu Ortsnamen zu dekodieren. Es funktioniert gut. Aber da ist noch eine Sache, die mich stört. Wenn ich die Gerätesprache auf Englisch eingestellt, das Ergebnis des Codes unter:CLPlacemark.locality, Wert ändert sich, wenn die Gerätesprache unterschiedlich ist

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

}

wird in Englisch angezeigt, wie: chengdu.

, wenn ich das Gerät Sprache auf Chinesisch zu ändern,

placemarker.locality 

gibt einen chinesischen Zeichenwert.

Aber was ich wirklich will ist, dass es immer einen englischen Zeichenwert zurückgibt (kein chinesischer Zeichenwert). Ich denke, das ist etwas mit dem Gebietsschema verwandt. Kann mir jemand helfen? Vielen Dank.

Antwort

13

Normalerweise ist es keine gute Übung, sich mit Benutzereinstellungen zu messen. Wenn die Gerätesprache auf Chinesisch eingestellt ist, weil der Benutzer chinesische Schriftzeichen lesen möchte, warum möchten Sie ihn dann auf Englisch zeigen, wenn er Ihnen bereits gesagt hat, dass er Chinesisch möchte?

Wie auch immer, wenn aus irgendeinem Grund müssen Sie Englisch zwingen, können Sie den Geocoder Trick, der die standardUserDefaults erste Sprache verwendet, so dass Sie so etwas wie dies gerade vor dem Aufruf der Geocoder Methode tun:

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

Auf diese Weise GeoCoder gibt Ihnen alle Informationen in Englisch.

Dies wird jedoch die Benutzereinstellungen ändern, damit es eine beste Ansatz ist, sie zurück zu geben, wo sie waren:

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

Wie gesagt, sollten Sie wirklich denken, warum diese brauchen, aber wenn Sie brauche das wirklich, das würde funktionieren.

+1

Versucht diese Lösung, aber es funktioniert nicht auf iOS 9 oder ist das wegen des Simulators. Lassen Sie mich wissen, wenn jemand eine Problemumgehung kennt. –

+0

es funktioniert nicht für mich auch .. @MohammadAshrafulKabir hast du irgendwelche Updates zu diesem Thema? – Akshay

+0

@Akshay kein Update von meiner Seite –

4

fand ich eine schöne Lösung

NSString *country = placemark.ISOcountryCode; 

Dadurch wird die genaue Land egal welchen locale ist zurück. Beispiel: Land wird @ "US" anstelle von @ "USA" sein.

Verwandte Themen