swift - 当我使用约束并最小化 App 时,SceneKit 崩溃
问题描述
我的应用程序中有非常奇怪的行为,我无法解释。我有一个SceneKit
会话正在运行,有些nodes
已经constraints
分配(无论哪种)。当应用程序进入后台时,我nodes
将从 中删除所有scene
内容,当它再次出现时,我再次添加它们(出于此处不需要的原因,这是需要的)。当我constraints
分配并恢复应用程序时 - 它崩溃了。并非总是如此,但经常如此。我不知道该怎么做才能解决这个问题。constraints
我在删除时尝试删除nodes
,但这没有帮助。我得到的错误在屏幕截图中。有人可以帮我找到解决方案吗?
解决方案
您的问题没有显示您引用的代码,但我可以告诉您 EXC_BAD_ACCESS 错误通常意味着您正在尝试访问已从内存中释放的对象。
如果不深入讨论强变量与弱变量,您可能有一个weak
或unowned
变量(对于该约束)正在变成nil
并且您正在尝试访问(通过强制展开)。
当您删除这些节点时,或者当视图消失时,约束会从内存中释放。所以这里的修复是要么引用这个约束,strong
要么创建一个新的约束,在类中保持对那个的强引用,然后将该约束分配给对象。
假设您的参考是故事板,请替换:
@IBOutlet weak var constraint: NSLayoutConstraint!
和:
@IBOutlet var constraint: NSLayoutConstraint!
另请注意,该变量可能是强制解包 ( NSLayoutConstraint!
),这可能是您遇到 EXC_BAD_ACCESS 错误的原因。将您的约束设置为强变量而不是弱变量,或者更好的是,尽可能避免强制展开选项!
注意:如果这不能解决您的问题,请在为您的问题添加更多详细信息后发表评论。
推荐阅读
- ruby-on-rails - 当用户登录/注册时,如何使用活动模型序列化程序为用户呈现 jwt 令牌?
- google-cloud-platform - 将公共文件从 Google Cloud 下载到 Google colaboratory
- angular - 角度 9 中自定义管道测试用例的问题?
- java - 外部模块 A 和 B 将包 some.package 导出到 Java 9 中的模块 C
- typeahead - TypeAhead:错误消息而不是建议数据
- node.js - 如何使用“npm”包以编程方式“npm install”
- python - 在 Python 中使用字典构建二叉搜索树
- docker - 尝试连接到 Docker 守护程序套接字时拒绝获得权限的配置不保存
- r - 如何将轴放在图表后面?
- php - 在 php 中请求 Yahoo OAuth 令牌的问题