【问题标题】:IF Statement Seems To Work Fine On Simulator, But Not On Device!IF 语句在模拟器上似乎可以正常工作,但在设备上却不行!
【发布时间】:2009-11-10 20:37:13
【问题描述】:

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

- (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 然后按下按钮时,什么也没有发生(标签 ifWork 没有改变!)。

任何帮助将不胜感激,

学习

【问题讨论】:

  • 您是否已逐步检查代码以确保在设备上执行 if 语句?
  • 我认为这是相关的 discussions.apple.com/thread.jspa?threadID=1685984 虽然我不知道如何将其用于我的代码,因为它使用数字。
  • Level和Level2是如何声明和初始化的?在这次电话会议上,您认为他们有什么价值观?

标签: iphone objective-c button comparison timer


【解决方案1】:

您是否在调试器中运行代码以查看发生了什么?也许如果这些值取决于 CPU 或网络性能等任何因素,您可能会在模拟器和实际设备之间遇到显着差异,因此您无法确定在模拟器上运行的内容是否适用于设备。

【讨论】:

  • 感谢您的回复和想法,代码链接到一个不断减少的值。它不依赖于网络或CPU。计时器是否正确?标签甚至没有改变......那个IF有问题!斯图
  • 要计算经过的时间,我会将第二个时间戳反转为 [[NSDate date] timeIntervalSinceDate:self.startDate];否则你会得到一个负值。如果在 if(...) 语句处下断点并在模拟器上运行程序,是否得到预期值?
  • 对不起,我在上一篇文章中写错了。有趣的问题当然是,您是否在实际设备上获得了正确的值。
  • 在带断点的模拟器上尝试过,得到了预期的结果,在设备上再次尝试,仍然没有运气。该标签将指示 IF 是否有效……仍然没有更改为“DONE”。如果你有机会看看我上面提供的链接。感谢您迄今为止的所有帮助。
  • 我相信这里有两个问题。第一个是我的比较方法应该是 EPSILON 方法,而不是我试图使用的方法。另一件事是:设置了 Value2(不应该更新的那个),因此它所在的标签没有更新,但值本身却更新了。这意味着这两个值永远不会相差 3。再次感谢大家!
【解决方案2】:

可能有几个原因。

  • Level1 或 Level2 结果在设备上可能不同(使用设备上不同的未初始化内存
  • value2 - value1 可能非常接近 3.0 但略小于(双精度值通常有点不精确)
  • ifWork 可能在设备上设置不正确(即 nil),因此没有任何反应。

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

【讨论】:

  • 我使用 >=3.0 的事实是否意味着精度没有那么重要?它不需要完全是 3.0。
  • 如果您执行了一个您期望给出 3.0 的计算,但双精度的结果实际上是 2.999999999999998756,那么这会有所不同。如果您不关心边缘情况,那没关系。如果您确实关心边缘情况,那么您可能需要使用 >= 2.995 或类似的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多