0

おそらく非常に単純な問題ですが、私はすでに多くの時間を費やして諦めました...速度計算用のボタンとテキストフィールドがあります。ボタンを押して(km / h >> mph >> m / s >> km / hなど)、速度を再計算したら、ボタンのラベルを変更したいと思います。正常に動作する場合もありますが、CurrentSpeedValueが@ "km / h"であっても、「else」ステートメントにジャンプすることがよくあります。誰か助けてもらえますか?たぶんswitch-caseメソッドを使用する方が良いでしょうが、それはどのように述べられるべきですか?

- (IBAction)speedChange:(id)sender {
//CurrentSpeedUnit is saved to NSUserDefault in another action
    if (CurrentSpeedUnit == @"km/h") {
        [sender setTitle:@"mph" forState:UIControlStateNormal];
        CurrentSpeedUnit = @"mph";
        float speedToPrint = ([textSpeed.text floatValue]) / 1.609344;
        textSpeed.text = [[NSString alloc] initWithFormat:@"%.3f", speedToPrint];
    } else if (CurrentSpeedUnit == @"mph") {
        [sender setTitle:@"m/s" forState:UIControlStateNormal];
        CurrentSpeedUnit = @"m/s";
        float speedToPrint = ([textSpeed.text floatValue]) * 1.609344 / 3.6;
        textSpeed.text = [[NSString alloc] initWithFormat:@"%.3f", speedToPrint];
    } else {
        [sender setTitle:@"km/h" forState:UIControlStateNormal];
        CurrentSpeedUnit = @"km/h";
        float speedToPrint = ([textSpeed.text floatValue]) * 3.6;
        textSpeed.text = [[NSString alloc] initWithFormat:@"%.3f", speedToPrint];
    }
}
4

2 に答える 2

2

文字列の比較には、次を使用する必要があります

isEqualToString

例えば:

if ([CurrentSpeedUnit isEqualToString:@"km/h"]) 
{
     // Perfrom Action
}...
于 2012-12-11T04:42:30.473 に答える
0

そのような文字列を比較しないでください(ポインタは比較しますが、内容は比較しません)。isEqualToStringを使用します。

すなわち

if ([CurrentSpeedUnit isEqualToString:@"km/h"]) {
...

しかし、あなたではありません

if (CurrentSpeedUnit == @"km/h") {

時々動作するかもしれませんが、文字列を==と比較することは避けてください。

于 2012-12-11T04:34:24.603 に答える