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;

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...
}

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.
}

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.