この投稿で説明されているように、抱えていた問題を解決しましたが、以下の「質問」で提起したように、その理由を理解したいと思います (これを理解するのにかなりの時間を費やしています)。
UIStepper を使用して IBAction メソッドを呼び出すときに返される値の増減に問題がありました。アプリを実行してデバッグすると、ステップアップとステップダウンが可能で、ログステートメントは常に意図したステッパー値を反映していましたが、0.1、0.2、0.3 と繰り返しステップアップし、0.0 に戻ったときにステップダウンしました。テストの場合、デバッガーに表示される changeValue の値はガベージであり、テストは== 0.0の真の条件になりませんでした。0.2 まで上げてから 0.0 に戻した場合、changeValue の if テストが機能したことに注意してください。0.0 に戻ったときにガベージ値を取得したのは、0.3 にステップアップしたときだけです。
最初に、ステッパーをインクリメントするために、stepValue プロパティを次のように設定します。
viewStepper.stepvalue = 0.1
メソッドは、0.3 までステップアップして 0.0 に戻った後、ガベージ値を 0.0 で返しました。
割り当てを次のように変更したとき:
viewStepper.stepValue - 0.1f
問題が解決しました - changeValue は、if テストに対して意図した 0.0 changeValue を返し、反復回数に関係なく、メソッドは意図したとおりに機能します。
質問: 1) なんとなくわかりますが、stepValue が double の場合、代入値に "f" を明示的に含める必要があるのはなぜでしょうか? 2ステップの反復を行ったときにviewStepper.stepValueプロパティを割り当てましたが、 3回の反復を行ってから0.0に戻ったときにchangeValueのガベージを返しましたか?
これが私がテストしていた方法の核心です:
- (IBAction)doStepper:(UIStepper *)sender
{
double changeValue = [sender value];
NSLog(@"(double)change value %f", (double)changeValue);
NSLog(@"sender value:%0.1f", [sender value]);
if ((double)changeValue == 0.0) {
if (!something) {
// do stuff
}
// do stuff
} else {
// do stuff
}
}