IF声明不会返回true

时间:2013-02-03 10:12:11

标签: objective-c if-statement

  

可能重复:
  Why is my comparing if statement not working?

- (NSInteger)setSegment:(NSString *)segmentValue{
NSLog(@"setSegment began");
NSLog(@"Input Value: %@", segmentValue);
NSInteger var = -1;
if (segmentValue == @"Yes"){
    var = 1;
    NSLog(@"%d", var);
}
else if (segmentValue == @"East"){
    var = 1;
    NSLog(@"%d", var);
}
else if (segmentValue == @"No"){
    var = 0;
    NSLog(@"%d", var);
}
else if (segmentValue == @"North"){
    var = 0;
    NSLog(@"%d", var);
}
else if (segmentValue == @"South"){
    var = 2;
    NSLog(@"%d", var);
}
else if (segmentValue == @"West"){
    var = 3;
    NSLog(@"%d", var);
}
NSLog(@"%d", var);
return var;

}

当我执行此方法时,它会记录正确的值,并且每次都返回-1。 if语句即使应该返回true也不会执行。

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

这不是带有可重载运算符的C ++。 ==总是对其操作数进行数值比较,如果NSString *是指针类型,则表示指针相等。您必须使用isEqualToString:方法来比较NSString个对象。

答案 2 :(得分:1)

这是一个经典错误,可能会出现在许多编程语言中。问题是对字符串对象的引用是指向内存中对象地址的指针,并且您的代码比较指针值而不是字符串的内容,这是什么你想要的。

例如

NSString *a = @"Hello";
NSString *b = @"World";

现在假设a的地址为0x12345678b的地址为0x12348765,那么您的代码实际执行的是:

if (0x12345678 == 0x12348765)
{
    ...
}

要比较字符串的内容,请使用NSString方法isEqualToStringreference)。