- (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也不会执行。
答案 0 :(得分:3)
尝试将您的NSString与isEqualToString
进行比较。参考此处:https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html
答案 1 :(得分:2)
这不是带有可重载运算符的C ++。 ==
总是对其操作数进行数值比较,如果NSString *
是指针类型,则表示指针相等。您必须使用isEqualToString:
方法来比较NSString
个对象。
答案 2 :(得分:1)
这是一个经典错误,可能会出现在许多编程语言中。问题是对字符串对象的引用是指向内存中对象地址的指针,并且您的代码比较指针值而不是字符串的内容,这是什么你想要的。
例如
NSString *a = @"Hello";
NSString *b = @"World";
现在假设a
的地址为0x12345678
而b
的地址为0x12348765
,那么您的代码实际执行的是:
if (0x12345678 == 0x12348765)
{
...
}
要比较字符串的内容,请使用NSString
方法isEqualToString
(reference)。