web-dev-qa-db-fra.com

Comparez deux NSStrings

Dans mon application, il existe un mécanisme qui exige qu'à un certain point deux NSStrings seront les mêmes pour faire quelque chose; pour une raison quelconque, lorsque je compare les deux, même lorsqu'ils sont identiques, il ne reconnaît toujours pas cela. Le code est quelque chose comme ceci:

NSString * aString = [self someMethodThatGetsAString];

NSString * bString;

BOOL areStringsTheSame = NO;

while (areStringsTheSame != YES) {

       bString = [self someMethodThatTakesNSStringsFromAnArrey];
       if (bString == aString) {
             areStringsTheSame = YES;
       { }

J'ai même inséré une NSLog() et je me suis assuré qu'à un certain point, ils étaient les mêmes (et pour autant que je sache, c'est ce que == Signifie ...), mais cela n'a toujours pas été le cas pas entrer dans if pour changer la valeur de BOOL.

Existe-t-il une autre façon de faire cette comparaison? Suis-je en train de manquer quelque chose?

20
Ohad Regev

Vous pouvez utiliser la méthode isEqualToString: :

if ([bString isEqualToString:aString])

== compare les références (adresses des) chaînes et non la valeur des chaînes.

78
MByD

Cette approche a fonctionné pour moi:

if ([firstString compare:secondString] == NSOrderedSame) {
    //Do something when they are the same
} else {
    //Do something when they are different
}
5
xSolver

Récemment, j'ai été choqué par le fait que deux chaînes NSS qui se ressemblent sur NSLog peuvent être différentes. C'est parce que parfois NSString peut contenir un caractère d'espace de largeur nulle. Soyez conscient de cela et pensez à:

#define ZERO_WIDTH_SPACE_STRING @"\u200B"

Pour vaincre cela, vous devez nettoyer votre chaîne des espaces blancs de largeur nulle avant de comparer:

NSMutableString *eMailToAdd = [NSMutableString string];

NSMutableCharacterSet *charSet = [[NSCharacterSet whitespaceCharacterSet] mutableCopy];
    //[charSet formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]];

    NSString *rawStr = [[tokenField textField] text];
    for (int i = 0; i < [rawStr length]; i++)
    {
        if (![charSet characterIsMember:[rawStr characterAtIndex:i]])
        {
            [eMailToAdd appendFormat:@"%@",[NSString stringWithFormat:@"%c", [rawStr characterAtIndex:i]]];
        }
    }
4
wzbozon