Compare a NSNumber to an int
The result of comparison is a BOOL which is not an Objective-C object. Therefore you should not print it using
%@
. Try%d
instead (shows 0 or 1).[a compare:b]
returns -1 ifa < b
, 0 ifa == b
and 1 ifa > b
. So your 2nd result is expected.You cannot compare an NSNumber directly with an integer. That
i == 0
is actually a pointer comparison which checks whetheri
is NULL (0), which of course is FALSE if that number exists. So the 1st result is also expected.If you want to check for equality, use
[a isEqualToNumber:b]
. Alternatively, you could extract the integer out with[a intValue]
and compare with another integer directly.
So the followings should work:
NSLog(@"%@ == 0 -> %d", i, [i isEqualToNumber:[NSNumber numberWithInt:0]]);NSLog(@"%@ == 0 -> %d", i, [i intValue] == 0);
If the "number" is in fact a boolean, it's better to take the -boolValue
instead.
NSLog(@"%@ == 0 -> %d", i, ! [i boolValue]);
Here you're comparing the pointer of the object i with 0, which I'm afraid is not what you want.
You most probably want to compare the value of i:
if ([i intValue]==0) { ...}
You can easily write:
NSNumber *number = [NSNumber numberWithInt:123];int integer = 1234;NSLog(@"%@ == %i : %i", number, integer, [number intValue] == integer);
Output should be
123 == 1234 : 0
I hope i can help you!