Comparación de cadenas en Objective-C

92

Actualmente tengo configurado un servidor web que me comunico a través de SOAP con la aplicación de mi iPhone. Estoy devolviendo una cadena que contiene un GUID y cuando intento comparar esto con otra cadena, obtengo algunos resultados extraños.

¿Por qué esto no dispara? ¿Seguro que las dos cuerdas coinciden?

NSString *myString = @"hello world";

if(myString == @"hello world")
    return;
ingh.am
fuente
1
Esta pregunta ahora es casi inútil porque la captura de pantalla ha desaparecido. Es por eso que el código debe copiarse y pegarse en preguntas.
jscs
La captura de pantalla fue el error, creo, ¡pero la respuesta se dio hace como 2 años!
ingh.am
1
Pero ningún futuro lector puede ver el error o el código que estaba usando para saber si es el mismo que el de ellos, lo que significa que esta pregunta no puede ayudar a nadie más.
jscs
Buscaré la imagen. Entiendo que esto es como una base de referencia para otras preguntas, pero cerrarlo ahora es un poco inútil.
ingh.am
2
¿Por qué está cerrada esta pregunta? ¡Es una pregunta perfectamente válida!
ibz

Respuestas:

214

Utilice el -isEqualToString:método para comparar el valor de dos cadenas. El uso del ==operador C simplemente comparará las direcciones de los objetos.

if ([category isEqualToString:@"Some String"])
{
    // Do stuff...
}
jlehr
fuente
2
¡AH! Muchas gracias. ¡Siéntete un poco tonto con este!
ingh.am
3
Supongo que en ObjectiveC ++ podría crear una sobrecarga de operador para brindarle la capacidad sintácticamente azucarada de usar ==, pero ningún programador de C objetivo en su sano juicio haría esto, porque == solo se usa para verificaciones de identidad en objetos C objetivo.
Warren P
48

Puede usar una comparación que distingue entre mayúsculas y minúsculas, según lo que necesite. La distinción entre mayúsculas y minúsculas es así:

if ([category isEqualToString:@"Some String"])
{
   // Both strings are equal without respect to their case.
}

No distingue entre mayúsculas y minúsculas es así:

if ([category compare:@"Some String" options:NSCaseInsensitiveSearch] == NSOrderedSame)
{
   // Both strings are equal with respect to their case.
}
mxg
fuente
1
Creo que debería ser: ([comparación de categorías: @ "Algunas opciones de cadena": NSCaseInsensitiveSearch] == NSOrderedSame)
JaakL
9
Tenga cuidado con la función "comparar" porque si la cadena (en este caso "categoría") es nula, la comparación siempre devolverá NSOrderedSame.
nh32rg
¡¡Ese es un gran punto @ nh32rg !! +1 por eso! ¿IsEqualToString tiene el mismo problema?
badweasel
5

Puede comparar la cadena con las siguientes funciones.

NSString *first = @"abc";
NSString *second = @"abc";
NSString *third = [[NSString alloc] initWithString:@"abc"];
NSLog(@"%d", (second == third))  
NSLog(@"%d", (first == second)); 
NSLog(@"%d", [first isEqualToString:second]); 
NSLog(@"%d", [first isEqualToString:third]); 

Output will be :-
    0
    1
    1
    1
Vikram Pote
fuente