我已经解决了我在这篇文章中描述的问题,但我想了解它的原因(我花了很多时间来解决这个问题),正如我在下面的“问题”中提出的那样。
在使用 UIStepper 调用 IBAction 方法时,我遇到了递增和递减返回值的问题。当我运行和调试应用程序时,我可以上下调整,日志语句总是反映预期的步进值,但是当我迭代地提高 0.1、0.2 然后 0.3 然后降低时,当我回到 0.0 时,当我执行如果进行测试,则调试器中显示的 changeValue 的值是垃圾,并且测试没有导致== 0.0的条件为真。请注意,如果我只升到 0.2 然后又降到 0.0,则 changeValue 的 if 测试有效。只有当我提高到 0.3 时,当我回到 0.0 时才得到垃圾值。
最初,为了增加步进器,我将 stepValue 属性设置为:
viewStepper.stepvalue = 0.1
该方法在升压到 0.3 并返回 0.0 后返回 0.0 的垃圾值。
当我将作业更改为:
viewStepper.stepValue - 0.1f
问题已解决 - changeValue 为我的 if 测试返回预期的 0.0 changeValue,并且无论迭代次数如何,该方法都按预期工作。
问题:1)我有点明白这一点,但为什么如果 stepValue 是双精度值,赋值值是否需要显式包含“f”并且对我来说更奇怪 2)为什么我在方法中的测试在没有“f”的情况下工作在进行两步迭代时分配 viewStepper.stepValue 属性,但是当我向上进行三步迭代然后返回到 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
}
}