Se “a == b” é falso ao comparar dois objects NSString

Eu tenho uma class com um método acessível que retorna um NSString quando chamado.

 [MyClass getMyString] 

A variável de string nessa class é realmente atribuída no didSelectRowAtIndexPath: parte de uma tabela como esta:

 myString = cell.textLabel.text; 

Quando eu recupero a string chamando esse método, eu a atribuo a outra string na class que a chamou e a compara a uma string que defini

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

Eu tenho percorrido o código e toda vez que ele avalia a instrução if, ele pula para a direita após o i=9 e vai para a próxima declaração else if . Por que isso seria? Por que eles não avaliam o mesmo valor? Se você passar o cursor sobre cada um dos valores durante a debugging, eles mostrarão que têm o mesmo valor, mas o código, por algum motivo, não fará como eu esperava e atribuirá 9 a i .

Alguma ideia?

Você está assumindo que o operador C == faz igualdade de string. Não faz. Faz a igualdade do ponteiro (quando chamado em pointers). Se você quiser fazer um teste real de igualdade de strings, você precisa usar o método -isEqual: (ou a especialização -isEqualToString: quando você souber que ambos os objects são strings):

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

Você está comparando pointers para seqüências de caracteres, em vez das seqüências de caracteres próprios. Você precisa mudar seu código para

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

você não pode usar ‘==’ para comparar dois NSString

você deve usar [NSString isEqualToString: (NSString *)] para comparar duas strings

Você não pode comparar as duas seqüências usando “==” isto é para int e outros valores. você pode usar abaixo do código para a comparação de duas cadeias

if ([Firststring isEqualToString: Secondstring]) {

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

}

É um conceito básico de ponteiro, você está perdendo. (YES, myString e mySecondString são pointers para a string).

Agora, if(mySecondString == myString) for TRUE somente se, ambos os pointers estiverem apontando para o mesmo local. (Que eles não vão na maioria dos casos)

Você deve estar fazendo if ([mySecondString isEqualToString:myString]) , que estará comparando o conteúdo de ambas as cadeias para igualdade.