2011-12-22 24 views
6

Tengo una clase con un método accesible que devuelve un NSString cuando se llama.Si "a == b" es falso al comparar dos objetos NSString

[MyClass getMyString] 

La variable de cadena en esa clase se asigna realmente en la parte didSelectRowAtIndexPath: de una tabla como la siguiente:

myString = cell.textLabel.text; 

Cuando recupero la cadena llamando a ese método, que asignarlo a otra cadena de la clase que lo llamó y compararla con una cadena que he definido

NSString *mySecondString; 
mySecondString = @"my value"; 

if(mySecondString == myString){ 
    i = 9; 
} 

he caminado a través del código y cada vez que se evalúa la instrucción if, que s salta inmediatamente después del i=9 y va a la siguiente declaración else if. ¿Por qué sería esto? ¿Por qué no evalúan para ser del mismo valor? Si coloca el cursor sobre cada uno de los valores durante la depuración, mostrarán que tienen el mismo valor, pero el código por alguna razón no funciona como esperaba y asigne 9 a i.

¿Alguna idea?

+0

Me sorprende que una búsqueda en este sitio no haya arrojado ningún resultado. Esta pregunta ha sido formulada y respondida en numerosas ocasiones en el pasado. – dreamlax

+0

Tal vez no lo pregunté de la manera correcta cuando busqué antes de preguntar ... - vi muchas preguntas que trataban con CFString y asignándolas a NSString, pero no vi a qué respondió rápidamente Kevin Ballard. ¡Gracias! – MeisterPlans

+0

posible duplicado de [Comprender la comparación de NSString] (http://stackoverflow.com/questions/3703554/understanding-nsstring-comparison) –

Respuesta

17

Suponiendo que el operador C == realiza una cadena de igualdad. No es así Hace igualdad de puntero (cuando se llama en punteros). Si desea hacer una prueba de igualdad de cadenas real que necesita utilizar el método -isEqual: (o la especialización -isEqualToString: cuando se sabe que ambos objetos son cadenas):

if ([mySecondString isEqualToString:myString]) { 
    i = 9; 
} 
+0

¡SÍ! ¡¡Gracias!! Ese fue el problema exactamente! – MeisterPlans

2

no se puede utilizar '==' para comparar dos NSString

usted debe utilizar [NSString isEqualToString: (NSString *)] para comparar dos cuerdas punteros

3

que está comparando a las cadenas, en lugar de las propias cadenas. Debe cambiar su código a

if (if([mySecondString isEqualToString:myString]) { 
    .... 
} 
1

No puede comparar las dos cadenas con "==" esto es para int y otros valores. puede utilizar a continuación el código para la comparación de dos cuerdas

si ([Firststring isEqualToString: Secondstring]) {

NSLog(@"Hello this both string is same "); 

}

1

Es un concepto básico del puntero, se echa en falta. (SÍ, myString y mySecondString son punteros a la cadena).

Ahora, if(mySecondString == myString) irá TRUE solo si, ambos punteros están apuntando a la misma ubicación. (Que no lo harán en la mayoría de los casos)

Debería estar haciendo if ([mySecondString isEqualToString:myString]), que comparará el contenido de su cadena para la igualdad.

Cuestiones relacionadas