2010-08-02 8 views
0

J'utilise isEqualToString pour comparer deux chaînes de caractères? comme suit:Comparaison de deux chaînes

if ([ somethingString isEqualToString: @"MyString" ] ) 
    { //do something } else { //do something else } 

Maintenant, j'ai examiné somethingString avec NSLog et il semble ok en ce qu'elle montre ce que je pensais. Mais, l'instruction if ne fonctionne pas.

Je pense que même si le Débogueur montre l'objet là avant que le si soit exécuté, le type ou quelque chose d'autre est mauvais. Le thingString vient du UIPickerView qui est rempli avec un tableau d'objets ... si cela fait une différence.

Des pensées?

ps. J'ai essayé d'utiliser la comparaison: et cela ne fonctionne certainement pas.

+0

Je viens d'effectuer un test CFEqual entre savedFirstNotice et mère, le résultat est qu'ils ne sont pas égaux même si la sortie du journal montre Mère et Mère. Maintenant, j'ai besoin de comprendre ce que cela signifie .... – MadProfit

Répondre

0

vous devriez faire if ([somethingString compare: @"MyString"] == NSOrderedSame) { //do stuff }

+1

Quel est le problème avec isEqualToString: pour la comparaison de chaînes ...? – Kalle

+0

J'ai essayé de comparer et j'ai aussi essayé votre suggestion comparer avec NSOrderedSame. Compare actuellement les chaînes de rangs, en comparant potentiellement somethingString et SomethingString comme étant différents, sauf si vous ignorez la capitalisation. Vous pourriez comparer mon travail dans mon cas parce que je veux une comparaison exacte, mais ce n'est pas le cas. – MadProfit

+0

comparer n'est pas la bonne méthode à utiliser ici. cela crée des frais généraux et devrait être évité, sauf si vous avez besoin de classement. if ([a compare: b] == NSOrderedSame) est mal vu pour diverses raisons. – katzenhut

0

Vous ne fournissez pas d'informations suffisantes. Si somethingString est une sous-classe de NSString (sinon, il n'implémenterait probablement pas isEqualToString: en premier lieu) et sa valeur est égale à "MyString", alors [somethingString isEqualToString: @"MyString"] renverra YES.

+0

J'ai déclaré quelquechose comme suit: NSString * somethingString; – MadProfit

0

Pouvez-vous poster un simple, self-contained example du code qui ne fonctionne pas comme prévu? isEqualToString est la bonne méthode à appeler, le problème sera ailleurs. Êtes-vous sûr que les deux objets sont valides? Peut-être que l'un d'entre eux est déjà désaffecté ou nil. Ne confondez-vous pas l'équivalence de pointeur (foo == bar) avec l'équivalence de contenu ([foo isEqualToString:bar])?

+0

Merci zoul pour toute aide ou suggestion. Le code et le journal sont contenus dans ce thread. – MadProfit

+0

Je cherche l'équivalence du contenu et non pas l'équivalence du pointeur et j'ai même vérifié les adresses des objets pour m'assurer que quelque chose n'allait pas en ayant plusieurs mères qui couraient dans mon application, qui confondaient les choses ... contrairement à la vraie vie avec plus d'une mère. loi??! – MadProfit

0

Comme demandé par Zoul, voici le code et le journal ....

mère = @ "Mère";

if ([savedFirstNotice isEqualToString: mère])

{ NSLog (@"Mother was triggered") } 

    else 

    {  NSLog (@"Mother was not choosen"); 
      NSLog (@"savedFirstNotice is: %@", savedFirstNotice); 
      NSLog (@"mother is: %@", mother); 
    } 

2010-08-02 20: 34: 16,337 SafetyKnight [4492: 307] mère n'a pas été choisi

02/08/2010 20 : 34: 16,338 SafetyKnight [4492: 307] savedFirstNotice est: mère
2010-08-02 20: 34: 16,339 SafetyKnight [4492: 307] mère: mère

notez également que savedFirstNotice a été déclaré comme NSString . Il semblerait que Mère soit l'équivalent de Mère et que la "Mère a été déclenchée" aurait dû être la bonne réponse.

+0

Je viens d'effectuer un test CFEqual entre savedFirstNotice et mère, le résultat est qu'ils ne sont pas égaux, même si la sortie du journal montre Mère et Mère. Maintenant, j'ai besoin de comprendre ce que tout cela signifie .... - – MadProfit

+0

Peut-être savedFirstNotice contient un espace supplémentaire à la fin, par exemple. est égal à @ "Mother"? – MrMage

0

Pour les débutants ayant du mal à comprendre ce que faitEqualToString, je l'ai fait pour résoudre mon problème.

(1) Vérifiez si les deux chaînes sont CFEqual. (2) Dans les deux cas, analyser la chaîne caractère par caractère. Dans mon cas, les deux chaînes n'étaient pas de longueur égale, ce qui n'avait pas de sens pour le débogueur. Après l'analyse de la chaîne savedFirstNotice, quelle qu'en soit la raison, l'application ajoutait un espace vide avant la chaîne et deux espaces vides après la chaîne. Jusqu'à présent, il semble être une action cohérente, donc il est facile pour moi de l'éliminer de toutes mes variables que j'utilise dans la méthode.

Merci à tous pour vos suggestions - celles qui fonctionnent et qui ne fonctionnent pas car elles me donnent des idées ou des idées à méditer.

Voici le code qui a trouvé mon problème:

if (CFEqual (savedFirstNotice , mother)) 
    { NSLog (@" Both savedFirstNotice and mother are Equal") ; } 
     else 
     { NSLog (@" savedFirstNotice and mother are NOT Equal ") ; 
    NSLog (@" The length of savedFirstNotice is %d", savedFirstNotice.length); 
    NSLog (@" The length of mother is %d", mother.length); 
    NSLog (@" savedFirstNotice character 0 %c ",[ savedFirstNotice characterAtIndex: 0 ]); 
    NSLog (@" savedFirstNotice character 1 %c ",[ savedFirstNotice characterAtIndex: 1 ]); 
         // duplicate to capture the entire string 
      } 

, je recommande également que l'on lit la documentation Apple sur CFEqual et articles connexes.