it is probably a very simple problem but I spent already a lot of time on it and just have given up…
I have a button and a textfield for speed calculations. I want the button label change once the button is pressed (km/h >> mph >> m/s >> km/h and so on) and speed recalculated. It sometimes works fine but very often it jumps to “else” statement even if the CurrentSpeedValue is @”km/h”. Could anyone help? Maybe it would be better to use switch-case method but how should it be stated?
- (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];
}
}
You should not compare strings like that (you compare pointers but not the contents). Use isEqualToString.
i.e.
but not your
It may work sometimes, but just remember to avoid comparing strings with ==