第二次实例化 ARSCNView 时崩溃
Crash when instantiating ARSCNView for the second time
我的 iPhone 应用在销毁 ARSCNView 后再次尝试实例化时遇到问题。
在我的 ViewController 中,我以编程方式创建了一个用于动作捕捉交互的 ARSCNView:
func addARSceneView() {
arSceneView = ARSCNView(frame: self.view.frame)
arSceneView.loops = true
arSceneView.session.delegate = self
self.view.addSubview(arSceneView)
arSceneView.session.run(ARBodyTrackingConfiguration())
}
当用户离开应用程序的这一部分时,我将其拆解为:
func removeARSceneView() {
arSceneView.session.pause()
arSceneView.pause(self)
arSceneView.session.delegate = nil
arSceneView.removeFromSuperview()
arSceneView = nil
}
稍后,当我尝试使用上面的第一个函数第二次实例化 ARSCNView 时,它在构造函数中崩溃并显示 EXC_BAD_ACCESS:
我还尝试使用 xib 中包含 ARSCNView 的视图,但同样的问题发生在该视图的 init(coder) 函数中。
我在这个问题上一无所获,我想通常开发人员只创建一次 ARSCNView。
TLDR:在您的方案中打开“金属 API 验证”。
我找到了罪魁祸首,在创建了一个只有 ARSCNView 的示例项目后,它没有出现这个问题。我首先从我的原始项目中剥离所有内容,直到它像示例一样准系统。那并没有解决它,所以我比较了两者的每一个小设置,并且看到:在原始项目的“运行”方案中,在“诊断”下,我有“金属 - API 验证" 勾选 关闭。我不记得我是什么时候这么做的,为什么这么做;我认为这是一次提高性能的尝试。但是,启用此复选框完全解决了问题。
我的 iPhone 应用在销毁 ARSCNView 后再次尝试实例化时遇到问题。
在我的 ViewController 中,我以编程方式创建了一个用于动作捕捉交互的 ARSCNView:
func addARSceneView() {
arSceneView = ARSCNView(frame: self.view.frame)
arSceneView.loops = true
arSceneView.session.delegate = self
self.view.addSubview(arSceneView)
arSceneView.session.run(ARBodyTrackingConfiguration())
}
当用户离开应用程序的这一部分时,我将其拆解为:
func removeARSceneView() {
arSceneView.session.pause()
arSceneView.pause(self)
arSceneView.session.delegate = nil
arSceneView.removeFromSuperview()
arSceneView = nil
}
稍后,当我尝试使用上面的第一个函数第二次实例化 ARSCNView 时,它在构造函数中崩溃并显示 EXC_BAD_ACCESS:
我还尝试使用 xib 中包含 ARSCNView 的视图,但同样的问题发生在该视图的 init(coder) 函数中。
我在这个问题上一无所获,我想通常开发人员只创建一次 ARSCNView。
TLDR:在您的方案中打开“金属 API 验证”。
我找到了罪魁祸首,在创建了一个只有 ARSCNView 的示例项目后,它没有出现这个问题。我首先从我的原始项目中剥离所有内容,直到它像示例一样准系统。那并没有解决它,所以我比较了两者的每一个小设置,并且看到:在原始项目的“运行”方案中,在“诊断”下,我有“金属 - API 验证" 勾选 关闭。我不记得我是什么时候这么做的,为什么这么做;我认为这是一次提高性能的尝试。但是,启用此复选框完全解决了问题。