Comparaison de 2 strings qui ne passe pas

muqaddarmuqaddar Administrateur
12:33 modifié dans API AppKit #1
Salut,

Je cherche à  comparer 2 strings :

<br />NSLog (@&quot;paysId : %@&quot;, paysId);<br />NSLog (@&quot;dictPays objectForKey : %@&quot;, [[dictPays objectForKey:@&quot;paysId&quot;] description]);<br />


Ici, j'obtiens le même chiffre (qui est en fait une string) : 4.

A la suite, je fais :
<br />if ([[[dictPays objectForKey:@&quot;paysId&quot;] description] isEqualToString: paysId]) {<br />	NSLog (@&quot;toto&quot;);<br />}


Or , le toto ne s'affiche jamais. Pourtant, je suis bien avec 2 types strings.
Une idée ?

Réponses

  • 12:33 modifié #2
    Si [dictPays objectForKey:@paysId] est un NSString pas besoin de -description-

    Donc : [[dictPays objectForKey:@paysId] isEqualToString: paysId]

    Si [dictPays objectForKey:@paysId] est par exemple un NSNumber tu peux par exemple utiliser stringValue:
    [[[dictPays objectForKey:@paysId] stringValue] isEqualToString: paysId]

    Dans tous les cas tu dois savoir que description est la méthode utilisée par NSLog dans un cas genre: NSLog(@description %@",string)

    Tu peux le tester toi même en ajoutant - (NSString*) description dans l'une de tes classes que tu affiches ensuite: NSLog(@classe:%@",unpointeursurlaclasse);

    NSLog(@description %@",string) n'est qu'un raccourci vers NSLog(@description %@",[string description])
  • muqaddarmuqaddar Administrateur
    12:33 modifié #3
    Et bien dans mon cas, paysId (de mon dico) est un NSNumber.
    Alors même si je fais :
    if ([[[dictPays objectForKey:@paysId] stringValue] isEqualToString: actuelPaysId])
    ça ne marche pas et ne rentre pas dans le if ! Je ne vois pas pourquoi.

    Les 2 valeurs retournées sont bien les mêmes :
    dictPays objectForKey : 4
    actuelPaysId : 4

    actuelPaysId est aussi une string...
  • décembre 2004 modifié #4
    Et un NSLog de [[dictPays objectForKey:@paysId] stringValue] donne toujours 4 ?

    Pourquoi comparer un entier avec un chaine.... ?

    if ([[dictPays objectForKey:@paysId] intValue] == 4)
  • muqaddarmuqaddar Administrateur
    12:33 modifié #5
    dans 1103707746:

    Et un NSLog de [[dictPays objectForKey:@paysId] stringValue] donne toujours 4 ?

    Pourquoi comparer un entier avec un chaine.... ?

    if ([[dictPays objectForKey:@paysId] intValue] == 4)


    Oui, ça donne tjs 4.
    Parce que je lui envoie une string (enfin je pense) , tient bonne question :

    [self loadDataWithId: [tempDict objectForKey:@paysId]];
    Ici paysId est un number, mais ma fonction étant définie ainsi :

    - (void)loadDataWithId:(NSString *)actuelPaysId

    Je pensais que ça me le convertissait en string à  l'arrivée, ai-je tort ?

  • muqaddarmuqaddar Administrateur
    12:33 modifié #6
    Ah, bein je viens de tout transformer en number (envoie et réception), et j'ai mis isEqualToNumber, et tout baigne, le if passe maintenant !

    Merci à  toi mikael !
  • 12:33 modifié #7
    Bein si loadDataWithId attend un NSString tu dois lui en donner un :

    [self loadDataWithId: [[tempDict objectForKey:@paysId] stringValue];
  • muqaddarmuqaddar Administrateur
    12:33 modifié #8
    OK, là  était mon erreur...
    Je pensais qu'il le convertissait bêtement à  la réception, puisque le prog ne bronchait pas sur le type reçu...
    merci !
Connectez-vous ou Inscrivez-vous pour répondre.