Swift 当我使用约束和最小化应用程序时,SceneKit崩溃

Swift 当我使用约束和最小化应用程序时,SceneKit崩溃,swift,scenekit,exc-bad-access,arkit,Swift,Scenekit,Exc Bad Access,Arkit,我的应用程序中有非常奇怪的行为,我无法解释。我有一个SceneKit会话正在运行,一些节点分配了约束(无论什么类型)。当应用程序转到后台时,我将从场景中删除所有节点,当它再次出现时,我将再次添加它们(这是出于此处不需要的原因)。当我分配了此约束并恢复应用程序时,它会崩溃。不总是,但经常。我不知道该怎么解决这个问题。当删除节点时,我尝试删除约束,但这没有帮助。我得到的错误在屏幕截图中。有人能帮我找到解决办法吗 您的问题没有显示您正在引用的代码,但我可以告诉您,EXC\u BAD\u访问错误通常意味

我的应用程序中有非常奇怪的行为,我无法解释。我有一个
SceneKit
会话正在运行,一些
节点
分配了
约束
(无论什么类型)。当应用程序转到后台时,我将从
场景中删除所有
节点
,当它再次出现时,我将再次添加它们(这是出于此处不需要的原因)。当我分配了此
约束并恢复应用程序时,它会崩溃。不总是,但经常。我不知道该怎么解决这个问题。当删除
节点时,我尝试删除
约束
,但这没有帮助。我得到的错误在屏幕截图中。有人能帮我找到解决办法吗


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

如果不深入了解变量,您可能有一个
无主
变量(对于该约束),该变量将变为
nil
,并且您正试图访问该变量(通过强制展开)

删除这些节点或视图消失时,约束将从内存中释放。因此,这里的修复方法是要么引用这个约束
strong
,要么创建一个新的约束,保留对类中约束的强引用,并将该约束指定给对象

假设引用的是情节提要,请替换:

@IBOutlet弱var约束:NSLayoutConstraint

与:

@IBOutlet var constraint:NSLayoutConstraint

还请注意,该变量可能是强制展开的(
NSLayoutConstraint!
),这可能就是您遇到EXC\u BAD\u访问错误的原因。将约束设置为强变量而不是弱变量,或者更好的做法是,尽可能避免强制展开选项


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

实际上,我的意思是
SCNConstraint
,而不是
NSLayoutConstraint
——对不起,我应该更具体一些。无论如何,这里不是弱/无主属性的方式,因为此约束仅直接分配给
SCNNode.constraints
。好的!不过,我不会改变我的答案。EXC_BAD_访问错误意味着您正在强制展开
nil
的变量,或者实际上正在访问不再存在的变量。希望这有帮助!这是否可能是SDK中的错误?如果是在我的代码中,我是否应该在线程堆栈中看到我编写的一些函数?是否有可能SDK并不完美,是的!但在这种情况下,我认为这是不可能的。尝试使用调试器在代码中找到应用程序崩溃的确切点,并确定该变量是否为可选的未包装类型。例如,
SCNConstraint
SCN约束?