Unity 和 iOS:无论条件如何,“if”内的行始终在运行

本文关键字:if 运行 iOS 条件 Unity | 更新日期: 2023-09-27 18:32:26

我已经处理这个奇怪的问题几天了,我真的没有想法。

我正在为 iOS 使用 Unity 编程。这是有问题的代码片段:

if (!aux.IsDownloaded())
{
    aux.restoreTransaction();
    aux.DownloadItem();
}

真正奇怪的问题是辅助。DownloadItem() 始终被执行。条件是真是假并不重要。如果条件为真,它不应该进入"如果",但它确实如此!它只是跳过第一行(restoreTransaction)并运行第二行(DownloadItem)。如果条件为 false,则它只是正常运行。

为了发现更多的东西,我尝试了几件事:

  • 如果我对 DownloadItem 行进行注释,调试器会显示它运行 restoreTransaction 行,无论条件的值如何,但它实际上是在运行 DownloadItem,因为下载发生了。
  • 如果我用任何其他表达式替换 restoreTransaction 行(在我的例子中是 15 行 Debug.Log("ARGGG")),它只是跳过所有这些并运行 DownloadItem 行。

我真的迷茫了。我认为这可能是数据损坏,所以我删除了Unity项目中的库文件夹并清除了Monodevelop缓存,但它一直在做这种奇怪的事情。

我不知道还能尝试什么。欢迎任何想法,请放弃任何猜测,无论听起来多么愚蠢,因为我真的没有想法,至少我想继续尝试。

编辑:经过更多的测试,设备正在运行的内容与我在monodevelop中调试的内容之间显然存在差异。也许是Unity 3D生成xCode项目的问题?

这是迄今为止我发现的最奇怪的事情。

亲切问候

艾尔纳里翁

Unity 和 iOS:无论条件如何,“if”内的行始终在运行

欢迎,

(由于我的声誉,我不能写评论,所以如果这没有帮助,只需删除答案)

这不是一个真正的解决方案,但正如您所写:

只要放弃任何猜测,无论它听起来多么愚蠢在你的脑海中

更改最后一行怎么样?您试图在有问题的部分上方用垃圾填充代码。似乎如果这句话是真的,那么运行最后一行......如果我是对的,那么您可以在 AFTER 之后插入一个新行,例如 Debug.Log("WEIRDPROBLEM").

希望它有帮助,并为糟糕的英语和"不发表评论"感到抱歉,

猛禽

很可能这只是调试器的问题,你的代码很好。您可以通过记录 aux 的结果来确保这一点。IsDownloaded().像这样:

bool downloaded = aux.IsDownloaded();
Debug.Log(downloaded);
if (downloaded) {
    ...
}

如果记录了正确的值,并且调试器单步执行了错误的行,则可能是在调试器中遇到极端情况,或者程序集的调试器元数据由于某种原因不同步。