首页 > 解决方案 > 当我使用约束并最小化 App 时,SceneKit 崩溃

问题描述

我的应用程序中有非常奇怪的行为,我无法解释。我有一个SceneKit会话正在运行,有些nodes已经constraints分配(无论哪种)。当应用程序进入后台时,我nodes将从 中删除所有scene内容,当它再次出现时,我再次添加它们(出于此处不需要的原因,这是需要的)。当我constraints分配并恢复应用程序时 - 它崩溃了。并非总是如此,但经常如此。我不知道该怎么做才能解决这个问题。constraints我在删除时尝试删除nodes,但这没有帮助。我得到的错误在屏幕截图中。有人可以帮我找到解决方案吗?

在此处输入图像描述

标签: swiftscenekitexc-bad-accessarkit

解决方案


您的问题没有显示您引用的代码,但我可以告诉您 EXC_BAD_ACCESS 错误通常意味着您正在尝试访问已从内存中释放的对象。

如果不深入讨论强变量与弱变量,您可能有一个weakunowned变量(对于该约束)正在变成nil并且您正在尝试访问(通过强制展开)。

当您删除这些节点时,或者当视图消失时,约束会从内存中释放。所以这里的修复是要么引用这个约束,strong要么创建一个新的约束,在类中保持对那个的强引用,然后将该约束分配给对象。

假设您的参考是故事板,请替换:

@IBOutlet weak var constraint: NSLayoutConstraint!

和:

@IBOutlet var constraint: NSLayoutConstraint!

另请注意,该变量可能是强制解包 ( NSLayoutConstraint!),这可能是您遇到 EXC_BAD_ACCESS 错误的原因。将您的约束设置为强变量而不是弱变量,或者更好的是,尽可能避免强制展开选项!

注意:如果这不能解决您的问题,请在为您的问题添加更多详细信息后发表评论。


推荐阅读