Dans mon application, il existe un mécanisme qui exige qu'à un certain point deux NSString
s 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?
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.
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
}
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]]];
}
}