Get country with ISO country code

Aussitôt dit, aussitôt travaillé.


 


J'arrive à  avoir mon nom de pays à  partir du country code comme ça (en passant le locale identifier en texte):



NSString *identifier = [NSLocale localeIdentifierFromComponents:[NSDictionary dictionaryWithObject:countryCode forKey:NSLocaleCountryCode]];
NSString *country = [[[NSLocale alloc] initWithLocaleIdentifier:@en_UK] displayNameForKey:NSLocaleIdentifier value:identifier];

Mais pas à  partir de [NSLocale currentLocale]:



NSString *country = [[NSLocale currentLocale] displayNameForKey:NSLocaleCountryCode value:countryCode];

Country est toujours nil.


Qu'ai-je loupé ?


 


Je ne veux pas envoyer en string le locale identifier.


Réponses

  • AliGatorAliGator Membre, Modérateur
    - Que vaut [NSLocale currentLocale] lors de tes tests ? (Parce que bon s'il est "nil", c'est sûr que tu vas pas aller loin)...

    - Tu as testé sur Device ou sur Simulateur ? (Rappelles-toi aussi le bug connu mentionné dans les Release Notes Apple de Xcode 6.1 concernant le fait qu'ils remontent la mauvaise locale quand tu testes dans le simulateur)

    - Et sinon tes 2 codes ne sont pas identiques (dans le second cas tu demandes le "displayNameForKey:" directement sur le NSLocaleCountryCode et la string "countryCode", alors que dans le premier cas tu demandes d'abord le identifier à  partir du countryCode, puis tu demandes le "displayNameForKey" sur ce NSLocaleIdentifier, donc en 2 temps). Pourquoi comparer des codes différents ?

    Le code suivant par exemple ne retournerait-il pas ce que tu veux ?

    NSString *identifier = [NSLocale localeIdentifierFromComponents:@{NSLocaleCountryCode: countryCode}];
    NSString *country = [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:identifier];
  • muqaddarmuqaddar Administrateur
    janvier 2015 modifié #3

    [NSLocale currentLocale] est bien OK sur device et simulateur (en_US sur le simu).


     


    Mon code marche bien sur le device (je n'avais pas testé !). Le tien aussi.


     


    C'est donc sur le simulateur qu'il y a un bug... ce qui est bien chiant pour mes développements.


     


    Merci !


  • muqaddarmuqaddar Administrateur

    J'ai trouvé une parade au bug:



    NSLocale *currentLocale = [[NSLocale alloc] initWithLocaleIdentifier:[NSLocale currentLocale].localeIdentifier];    
    NSString *identifier = [NSLocale localeIdentifierFromComponents:@{NSLocaleCountryCode: countryCode}];
    NSString *country = [currentLocale displayNameForKey:NSLocaleIdentifier value:identifier];

    Voir ici:


    http://stackoverflow.com/questions/26613011/xcode-6-1-ios-8-1-nslocale-displaynameforkey-nslocaleidentifier-return-nil


Connectez-vous ou Inscrivez-vous pour répondre.