2010-04-07 14 views
57

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

¿Por qué no se disparará? Sin duda, las dos cuerdas son un partido?

NSString *myString = @"hello world"; 

if(myString == @"hello world") 
    return; 
+1

Esta pregunta ahora es en su mayoría inútil porque la captura de pantalla ha desaparecido. Esta es la razón por la que el código debe copiarse en las preguntas. –

+0

La captura de pantalla fue el error, creo, pero la respuesta fue como hace 2 años. –

+1

Pero ningún lector futuro puede ver el error o el código que estaba utilizando para saber si es el mismo que el de ellos, lo que significa que esta pregunta no puede ayudar a nadie más. –

Respuesta

147

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

if ([category isEqualToString:@"Some String"]) 
{ 
    // Do stuff... 
} 
+1

¡AH! Agradeciendo mucho. ¡Siéntete un poco tonto en este caso! –

+2

Supongo que en ObjectiveC++ puedes crear una sobrecarga de operador para darte la habilidad sintácticamente azucarada de usar == pero ningún programador de C objetivo objetivo haría esto, porque == solo se usa para las comprobaciones de identidad en los objetos del objetivo C. –

41

Puede usar la distinción de mayúsculas y minúsculas o mayúsculas y minúsculas, dependiendo de lo que necesite. mayúsculas y minúsculas es así:

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

Caso insensible 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: ([categoría comparar: @ "Algunas cadenas" opciones: NSCaseInsensitiveSearch] == NSOrderedSame) – JaakL

+7

Tenga cuidado con la función "comparar" porque si la cadena (en este caso "categoría") es nula, compare siempre devolverá NSOrderedSame. – nh32rg

+0

¡Es un gran punto @ nh32rg! +1 por eso! ¿El isEqualToString tiene el mismo problema? – badweasel

1

Es posible comparar cadena con funciones de abajo.

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 
Cuestiones relacionadas