Iphone IF语句在模拟器上似乎工作正常,但在设备上却不行!

Iphone IF语句在模拟器上似乎工作正常,但在设备上却不行!,iphone,objective-c,button,comparison,timer,Iphone,Objective C,Button,Comparison,Timer,好吧,问题是当我的应用程序在模拟器上运行时,它似乎工作正常。但是,在设备上,它不会更新所有标签。我认为错误就在这里: - (IBAction)buttonclick1 { self.startDate = [NSDate date]; double value = [self Level]; double value2 = [self Level2]; if ((value2 - value) >= 3.0) { ifWork.

好吧,问题是当我的应用程序在模拟器上运行时,它似乎工作正常。但是,在设备上,它不会更新所有标签。我认为错误就在这里:

- (IBAction)buttonclick1 {  

     self.startDate = [NSDate date];  
     double value = [self Level];  
     double value2 = [self Level2];  


if ((value2 - value) >= 3.0) {

    ifWork.text = @"DONE!";
    ifWork.textColor = [UIColor yellowColor];

    float noSeconds = (float) [self.startDate timeIntervalSinceNow]; 
  }
}
我对这个游戏不熟悉。我要寻找的是,当按下按钮时,它会乘以事件发生所需的时间。然后我想用这个时间来计算

我知道IF语句是正确的,因为它在模拟器上工作。但是,在设备上,当value和value2相差3,然后按下按钮时,什么也不会发生(标签iWork不会更改!)

任何帮助都将不胜感激


Stu

您是否在调试器中运行代码以查看发生了什么?如果这些值取决于CPU或网络性能,您可能会体验到模拟器和实际设备之间的显著差异,因此您无法确定模拟器上的工作是否在设备上工作。

您是否在调试器中运行代码以查看发生了什么?如果这些值取决于CPU或网络性能,您可能会体验到模拟器与实际设备之间的显著差异,因此您无法确定模拟器上的功能是否适用于设备。

可能有一些原因

  • 设备上的级别1或级别2结果可能不同(使用设备上不同的未初始化内存)
  • value2-value1可能非常接近3.0,但略小于(双倍通常有点不精确)
  • ifWork可能在设备上设置不正确(即nil),因此不会发生任何事情

最好的解决方案是在设备上进行调试(逐行检查代码)并检查这些情况是否属实。

可能有一些原因

  • 设备上的级别1或级别2结果可能不同(使用设备上不同的未初始化内存)
  • value2-value1可能非常接近3.0,但略小于(双倍通常有点不精确)
  • ifWork可能在设备上设置不正确(即nil),因此不会发生任何事情


最好的解决方案是在设备上进行调试(逐行检查此代码)并检查这些内容是否属实。

您是否仔细检查了代码,以确保在设备上执行if语句?我认为这是相关的,尽管我不知道如何将其用于我的代码,因为它使用数字。如何声明和初始化Level和Level 2?您认为在执行此ca时它们具有哪些值ll?你有没有仔细检查过代码以确保在设备上执行if语句?我认为这是相关的,尽管我不知道如何在我的代码中使用它,因为它使用数字。Level和Level 2是如何声明和初始化的?你认为在调用时它们有什么值?谢谢你的回答和想法,code链接到一个不断减小的值。它不依赖于网络或CPU。计时器是否正确?标签甚至没有改变…如果!Stude要计算经过的时间,我将第二个时间戳反转为[[NSDate date]timeintervalncedate:self.startDate];否则将得到负值。如果在If(…)处放置断点声明并在模拟器上运行程序,您得到预期值了吗?抱歉,我在上一篇文章中犯了一个错误。当然,有趣的问题是,您是否在实际设备上得到了正确的值。在模拟器上尝试了断点,得到了预期结果,在设备上再次尝试,仍然没有运气。该标签将指示无论IF是否起作用…对“完成”仍然没有更改。如果有机会,请查看我上面提供的链接。感谢您迄今为止的所有帮助。我相信这里有两个问题。第一个问题是,我的比较方法应该是EPSILON方法,而不是我试图使用的方法。另一个问题是:Value2(不应更新的方法)设置为使其所在的标签没有更新,但值本身却更新了。这意味着这两个值从未分开过3。再次感谢大家!感谢您的响应和想法,代码链接到一个不断减小的值。它不依赖于网络或CPU。计时器正确吗?标签甚至没有更改。。。IF!Stude要计算经过的时间,我将第二个时间戳反转为[[NSDate date]timeIntervalSinceDate:self.startDate];否则将得到负值。如果在IF(…)处放置断点声明并在模拟器上运行程序,您得到预期值了吗?抱歉,我在上一篇文章中犯了一个错误。当然,有趣的问题是,您是否在实际设备上得到了正确的值。在模拟器上尝试了断点,得到了预期结果,在设备上再次尝试,仍然没有运气。该标签将指示无论IF是否起作用…对“完成”仍然没有更改。如果有机会,请查看我上面提供的链接。感谢您迄今为止的所有帮助。我相信这里有两个问题。第一个问题是,我的比较方法应该是EPSILON方法,而不是我试图使用的方法。另一个问题是:Value2(不应更新的方法)设置为使其所在的标签不更新,但值本身却更新了。这意味着这两个值从未分开过3。再次感谢大家!我使用>=3.0这一事实是否意味着精度没有那么重要?它不需要精确到3.0。如果您执行了一个计算,您希望得到3.0,但双精度的结果实际上是2.99999999998756,这就有区别了。如果你不关心边的情况,那就没关系。如果你真的关心边的情况,那么你可能需要使用>=2.995或类似的东西。如果我使用>=3的话。