2010-10-15 15 views
45

Ich muss das aktuelle Land in den iPhone-Einstellungen erhalten. Kann mir jemand sagen, wie man das aktuelle Land in iPhone-Anwendung bekommt.Finden Sie das aktuelle Land vom iPhone Gerät

Ich muss das aktuelle Land zum Parsen des RSS-Feeds verwenden, in dem ich das aktuelle Land passieren muss.

Bitte helfen Sie mir, das Land zu finden.

Vielen Dank im Voraus.

+3

Ist das Land aus den Lokalisierungseinstellungen des iPhone oder das Land, in dem das iPhone derzeit physikalisch befindet? – JeremyP

Antwort

124

Um das Land von dem gewählten Sprache des Benutzers zu finden:

NSLocale *currentLocale = [NSLocale currentLocale]; // get the current locale. 
NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode]; 
// get country code, e.g. ES (Spain), FR (France), etc. 

In Swift:

let currentLocale = NSLocale.currentLocale() 
let countryCode = currentLocale.objectForKey(NSLocaleCountryCode) as? String 

Wenn Sie den Ländercode der aktuellen Zeitzone finden wollen, @chings228's answer sehen.

Wenn Sie den Ländercode des physischen Standorts des Geräts suchen möchten, benötigen Sie CoreLocation mit umgekehrter Geocodierung. Sehen Sie diese Frage für Detail: How can I get current location from user in iOS

+0

+1 schön, ich lerne etwas neues, bitte sagen kann ich ein paar mehr Informationen zu diesem ... – Saawan

+1

@ranjeet: Sie finden die Referenz für NSLocale in http://developer.apple.com/library/ios/#documentation/ Kakao/Referenz/Stiftung/Klassen/NSLocale_Class/Reference/Reference.html. – kennytm

+0

Vielen Dank. Ich habe die Antwort bekommen. – AppAspect

3
NSTimeZone *gmt = [NSTimeZone localTimeZone]; 

NSLog(@"timezone gmt %@",gmt.abbreviation); 
16
NSLocale *locale = [NSLocale currentLocale]; 
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode]; 
NSString *country = [locale displayNameForKey: NSLocaleCountryCode value: countryCode]; 
+0

Das Code-Snippet war in Ordnung, aber plötzlich begann Exc_Bad_Access Fehler in der letzten Zeile .. !! = (NSZombie kann es nicht erkennen und App stürzt ab. – tGilani

9
NSLocale *countryLocale = [NSLocale currentLocale]; 
NSString *countryCode = [countryLocale objectForKey:NSLocaleCountryCode]; 
NSString *country = [countryLocale displayNameForKey:NSLocaleCountryCode value:countryCode]; 
NSLog(@"Country Code:%@ Name:%@", countryCode, country); 
//Country Code:IN Name:India 

Source Link.

+0

Es sollte NSLog sein (@ "Country Code:% @ Name:% @", countryCode, Land); – AlexanderZ

4

Wenn Sie testen und eine andere Sprache als Ihr System verwenden möchten, ist es am einfachsten, die Optionen Application Language und Ihres Schemas zu ändern, anstatt die Sprache und Region auf Ihrem Gerät oder Simulator zu ändern.

Zum Product ->Scheme ->Edit Scheme... ->Run ->Options und wählen Sie das Application Language und Application Region Sie testen möchten.

Edit Application Language and Application Region within Scheme Run Options

Von der iOS Dokumentation: Testing Your Internationalized App

+0

Wenn Sie denken, dass dies eine schlechte Antwort ist, hinterlassen Sie bitte einen Kommentar Warum benutze ich diese Strategie, und es funktioniert gut, soweit ich weiß, aber wenn es Probleme damit gibt, würde ich gerne über sie wissen! –

3

Swift 3.0 Lösung

if let countryCode = (Locale.current as NSLocale).object(forKey: .countryCode) as? String { 
      print(countryCode) 
     } 
+4

Warum nicht einfach 'Locale.current.regionCode'? – redent84

4

Für Geräte mit SIM Karte, die Sie diese verwenden können:

CTTelephonyNetworkInfo * network_Info = [CTTelephonyNetworkInfo new]; 
    CTCarrier * carrier = network_Info.subscriberCellularProvider; 
    NSString * countryCode = [carrier.isoCountryCode uppercaseString]; 
1

Swift 3.0 neuesten Arbeitscode ist

if let countryCode = (Locale.current as NSLocale).object(forKey: .countryCode) as? String { 
    print(countryCode) 
} 
Verwandte Themen