Si “a == b” es falso al comparar dos objetos NSString

Tengo una clase con un método accesible que devuelve un NSString cuando se llama.

 [MyClass getMyString] 

La variable de cadena en esa clase está realmente asignada en didSelectRowAtIndexPath: parte de una tabla como esta:

 myString = cell.textLabel.text; 

Cuando recupero la cadena llamando a ese método, la asigno a otra cadena en la clase que la llamó y la comparo con una cadena que he definido

 NSString *mySecondString; mySecondString = @"my value"; if(mySecondString == myString){ i = 9; } 

He recorrido el código y cada vez que evalúa la statement if, se salta inmediatamente después de i=9 y pasa a la siguiente statement 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 asigna 9 a i .

¿Alguna idea?

Usted está asumiendo que el operador C == realiza cadenas de igualdad. No es así Hace igualdad de puntero (cuando se llama en punteros). Si desea realizar una prueba de igualdad real de cadenas, debe utilizar el método -isEqual: (o la especialización -isEqualToString: cuando sepa que ambos objetos son cadenas):

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

Está comparando punteros a cadenas, en lugar de las cadenas en sí. Debes cambiar tu código a

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

no puede usar ‘==’ para comparar dos NSString

deberías usar [NSString isEqualToString: (NSString *)] para comparar dos cadenas

No puede comparar las dos cadenas usando “==” esto es para int y otros valores. puedes usar el código a continuación para comparar dos cuerdas

if ([Firststring isEqualToString: Secondstring]) {

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

}

Es un concepto básico de puntero, te estás perdiendo. (SÍ, myString y mySecondString son punteros a la cadena).

Ahora, if(mySecondString == myString) TRUE solo si ambos apuntan 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.