1

重複の可能性:
Objective-CでのNSString比較の理解

intとstringを比較したいのですが、コードが機能しません。これが私のコードです:

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

2つのオブジェクトが同一である==かどうかを知りたい場合を除いて、2つのObjective-Cオブジェクトを比較するために使用することはできません(つまり、の両側がまったく同じオブジェクトを参照し、同じ値を持つ2つの異なるオブジェクトを参照しません)。==

文字列が等しいかどうかを比較するには、次を使用する必要があります。

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])

ただし、シナリオでは、2つの文字列ではなく、2つの整数を比較する方がおそらく良いので、これを行うには、文字列をテキストフィールドから整数に変換する必要があります。

int num = [numberFromTextField intValue];

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

intValue文字列に有効な数値が含まれていない場合は0が返されることに注意してください。したがって、answerが0で、ユーザーが無効な数値を入力した場合、技術的に正しくない場合は正しいと判断されます。何らかの方法で比較する前に、またはを使用して入力が有効かどうかを判断することをNSNumberFormatter検討してください。NSScanneranswer

于 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 に答える