-3

可能重复:
为什么我的比较 if 语句不起作用?

- (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,它们也不会执行。

4

3 回答 3

3

尝试将您的 NSString 与isEqualToString. 参考这里:https ://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html

于 2013-02-03T10:15:48.607 回答
2

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

于 2013-02-03T10:16:09.910 回答
1

这是一个典型的错误,可以在许多编程语言中发生。问题是对 string 对象的引用是指向内存中对象地址的指针,并且您的代码比较指针值而不是string 的内容,这是您想要的。

例如

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

现在想象一下a有地址0x12345678并且b有地址,0x12348765那么你的代码实际上正在做的是:

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

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

于 2013-02-03T10:32:10.197 回答