Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

If "a == b" is false when comparing two NSString objects

I have a class with an accessible method that passes back an NSString when called.

[MyClass getMyString]

The string variable in that class is actually assigned in the didSelectRowAtIndexPath: part of a table like this:

myString = cell.textLabel.text;

When I retrieve the string by calling that method, I assign it to another string in the class that called it and compare it to a string I have defined

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

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

I have stepped through the code and every time it evaluates the if statement, it skips right past the i=9 and goes to the next else if statement. Why would this be? Why don't they evaluate to be the same value? If you hover your cursor over each of the values during debugging they will show they have the same value, but the code for some reason with not do as I expect it to do and assign 9 to i.

Any thoughts?

like image 555
MeisterPlans Avatar asked Dec 22 '11 01:12

MeisterPlans


3 Answers

You're assuming that the C == operator does string equality. It doesn't. It does pointer equality (when called on pointers). If you want to do a real string equality test you need to use the -isEqual: method (or the specialization -isEqualToString: when you know both objects are strings):

if ([mySecondString isEqualToString:myString]) {
    i = 9;
}
like image 86
Lily Ballard Avatar answered Oct 08 '22 12:10

Lily Ballard


You are comparing pointers to strings, rather than the strings themselves. You need to change your code to

if (if([mySecondString isEqualToString:myString]) {
    ....
}
like image 32
Sergey Kalinichenko Avatar answered Oct 08 '22 11:10

Sergey Kalinichenko


you can not use '==' to compare two NSString

you should to use [NSString isEqualToString:(NSString*)] to compare two string

like image 30
IPaPa Avatar answered Oct 08 '22 12:10

IPaPa