1

可能重复:
了解 Objective-C 中的 NSString 比较

我想比较一个 int 和一个字符串,但我的代码不起作用。这是我的代码:

NSLog(@"enterPressed was called");
int answer = firstNumber + secondNumber;
NSLog(@"Real Answer: %d", answer);

NSString *numberFromTextField = inputTextField.text;
NSLog(@"Number From Text Field: %@", numberFromTextField);

if (numberFromTextField == [NSString stringWithFormat:@"%d", answer]) {
    NSLog(@"Correct!");
}

这是控制台:

2012-12-09 13:10:55.087 MathQuiz[10728:c07] enterPressed 被调用

2012-12-09 13:10:55.087 MathQuiz[10728:c07] 真实答案:60

2012-12-09 13:10:55.088 MathQuiz[10728:c07] 文本字段中的数字:60

为什么不说“正确!”?

4

2 回答 2

2

==除非您想知道这两个对象是否相同(即,双方==指的是完全相同的对象,而不是具有相同值的两个不同的对象),否则您不能使用它来比较两个 Objective-C 对象。

要比较字符串是否相等,您必须使用:

if ([str1 isEqualToString:str2])

// or, compare to a constant string:

if ([str1 isEqualToString:@"String 2"])

// or, compare to a string made up on the spot:

if ([str1 isEqualToString:[NSString stringWithFormat:@"%d", answer])

但是,在您的场景中,比较两个整数而不是两个字符串可能更好,因此,您需要将文本字段中的字符串转换为整数:

int num = [numberFromTextField intValue];

if (num == answer)
{
    NSLog(@"Correct!");
}

请注意,intValue当字符串不包含有效数字时将返回 0,因此如果answer为 0,并且用户输入了无效数字,则在技术上不正确时将确定它是正确的。考虑使用 anNSNumberFormatter甚至 anNSScanner来确定输入是否有效,然后再以answer任何方式进行比较。

于 2012-12-09T21:20:11.350 回答
1

您需要将其比较为,

if ([numberFromTextField intValue] == answer)

(numberFromTextField == [NSString stringWithFormat:@"%d", answer])正在比较两个字符串的内存地址。不是价值观。以下将为您提供正确的值,

if ([numberFromTextField isEqualToString:[NSString stringWithFormat:@"%d", answer]])
于 2012-12-09T21:12:47.257 回答