2012-12-09 42 views
1

可能重复:
Understanding NSString comparison in Objective-C比较INT串

我要比较一个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月9日13:10:55.087 MathQuiz [10728:C07] enterPressed被称为

2012-12 -09 13:10:55.087 MathQuiz [10728:C07]真正的答案:60

2012年12月9日13:10:55.088 MathQuiz [10728:C07]编号自文本字段:60

为什么不说“正确!”?

+2

Ouch。这很伤人。我的意思是,认真。在尝试制作*最佳iOS App Ever(TM)*之前,请正确学习C并阅读一些一般的优秀编程实践。... – 2012-12-09 21:13:12

+0

我在教自己Objective-C。这是学习过程。在我的问题中,没有任何地方说我是专家,所以不要批评我不知道专家的一切。 – Chiapuz79

+0

@ H2CO3我不同意。我自学自学的时候,我认为一个很好的学习方法就是在你学习的时候投身并找出自己的想法。当然,你必须学习一些很好的编程习惯,但是你会更有动力,并且如果你“只是做”,你将能够更好地记住你学到的东西。 – DOK

回答

1

你需要把它作为比较,

if ([numberFromTextField intValue] == answer) 

(numberFromTextField == [NSString stringWithFormat:@"%d", answer])是比较两个字符串的内存地址。不是价值。下面会给你正确的价值观,

if ([numberFromTextField isEqualToString:[NSString stringWithFormat:@"%d", answer]]) 
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,用户输入无效号码,它将被确定在技​​术上不正确时是正确的。考虑使用NSNumberFormatter或甚至NSScanner来确定输入是否有效,然后以任何方式将其与answer进行比较。