1

私は2つのUILableを持っています:

myScore.text; および hisScore.text;

NSTimer が 0 になると、次のコードが表示されます。

if (MainInt <= 0) {
        [Mytimer invalidate];

        if (myScore.text < hisScore.text) {
            UIAlertView *win = [[UIAlertView alloc]initWithTitle:@"Congrats" message:@"You WIN" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [win show];
        }
        else if(myScore.text > hisScore.text) {
            UIAlertView *lose = [[UIAlertView alloc]initWithTitle:@"Hmmmm" message:@"You lose :(" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [lose show];
        }

        else if(myScore.text == hisScore.text) {
            UIAlertView *tie = [[UIAlertView alloc]initWithTitle:@"Not Bad" message:@"No winners. TIE" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [tie show];
        }
    }

私のスコアが彼のスコアよりも高い場合、どのように比較できますか? 私のコードは動作しません。助けてください。

4

3 に答える 3

4

現在、2 つの文字列を比較しています。

これらの文字列の整数値を比較する必要があります。intValueObjective-C で文字列の整数値にアクセスするには、メソッドを次のように使用できます。

[myScore.text intValue]
于 2012-11-13T01:36:42.377 に答える
1

使用する

[myScore.text integerValue];

または

[myScore.text intValue];
于 2012-11-13T01:40:37.150 に答える
0

なぜこれについてラベルのテキストを比較しているのですか?クラス内のある種の整数変数に実際のスコアが含まれている必要があります。ビューはデータの表示にのみ使用し、データの保存には使用しないでください。タイプまたはその他の適切なデータタイプのivarを使用する場合はint、それらの値に対して適切なアクションを実行できます。

ラベルは、データの適切にフォーマットされた表現を表示するために残します。

ただし、ラベルの使用を主張する場合は、最初にラベルテキストをint値に変換してください。

int scoreA = [myScore.text intValue];

編集:これがあなたの現在のコードの何が悪いのかについてのさらなる説明です。Objective-Cでは、NSStringクラスはまあクラスです。オブジェクトタイプです。あなたが書くとき:

if (myScore.text > hisScore.text)

実際には、2つの文字列オブジェクトの2つのメモリアドレスを比較しています。したがって、2つのポインタを比較しても意味がありません。

次のように2つの文字列を比較できます。

if ([myScore.text compare:hisScore.text] == NSOrderedAscending)

ただし、これは数字の比較ではなく、アルファベットの比較を行います。

ただし、ここで重要なのは、オブジェクトポインタで標準の比較演算子を使用することはめったにないということです。適切な方法を使用して、2つのオブジェクト値を比較します。

于 2012-11-13T01:41:39.837 に答える