EXC_BREAKPOINT 尝试在完成处理程序中从情节提要中以模态方式呈现时
EXC_BREAKPOINT when trying to present modally from storyboard in completion handler
在我的 ViewController.swift
中,我有这种方法,它在框的动画完成后以模态方式呈现 viewcontroller:
@objc func sceneTapped(recognizer: UITapGestureRecognizer) {
let location = recognizer.location(in: sceneView)
let hitResults = sceneView.hitTest(location, options: nil)
if hitResults.count > 0 {
let result = hitResults[0]
let box = result.node
let fadeAction = SCNAction.fadeOut(duration: 1.0)
let rotateAction = SCNAction.rotate(by: CGFloat(Double.pi*2), around: SCNVector3(x: 0.5, y: 1.5, z: 0), duration: 1.0)
let groupActions = SCNAction.group([rotateAction, fadeAction])
if box.name == Present.left.rawValue || box.name == Present.middle.rawValue || box.name == Present.right.rawValue {
box.runAction(groupActions, completionHandler: presentWebView)
}
}
}
presentWebView
使用故事板实例化 viewcontroller:
func presentWebView(){
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "webViewController")
self.present(vc, animated: true, completion: nil)
}
但每次应用程序在 self.present(vc, animated: true, completion: nil)
和 EXC_BREAKPOINT (code=1, subcode=0x1a1579b50)
时崩溃
但是,当我没有在完成处理程序中显示视图控制器时,即:
@objc func sceneTapped(recognizer: UITapGestureRecognizer) {
presentWebView()
}
这完全没问题
所以我不明白为什么在完成处理程序中呈现视图控制器会导致崩溃。
如有任何帮助,我们将不胜感激!
SCNAction
完成处理程序不会在主线程中调用。
根据 UIKit 指南,您的 UI 代码需要 运行 在主线程上。您应该可以使用 DispatchQueue.main.async { ... }
来做到这一点
在我的 ViewController.swift
中,我有这种方法,它在框的动画完成后以模态方式呈现 viewcontroller:
@objc func sceneTapped(recognizer: UITapGestureRecognizer) {
let location = recognizer.location(in: sceneView)
let hitResults = sceneView.hitTest(location, options: nil)
if hitResults.count > 0 {
let result = hitResults[0]
let box = result.node
let fadeAction = SCNAction.fadeOut(duration: 1.0)
let rotateAction = SCNAction.rotate(by: CGFloat(Double.pi*2), around: SCNVector3(x: 0.5, y: 1.5, z: 0), duration: 1.0)
let groupActions = SCNAction.group([rotateAction, fadeAction])
if box.name == Present.left.rawValue || box.name == Present.middle.rawValue || box.name == Present.right.rawValue {
box.runAction(groupActions, completionHandler: presentWebView)
}
}
}
presentWebView
使用故事板实例化 viewcontroller:
func presentWebView(){
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "webViewController")
self.present(vc, animated: true, completion: nil)
}
但每次应用程序在 self.present(vc, animated: true, completion: nil)
和 EXC_BREAKPOINT (code=1, subcode=0x1a1579b50)
但是,当我没有在完成处理程序中显示视图控制器时,即:
@objc func sceneTapped(recognizer: UITapGestureRecognizer) {
presentWebView()
}
这完全没问题
所以我不明白为什么在完成处理程序中呈现视图控制器会导致崩溃。
如有任何帮助,我们将不胜感激!
SCNAction
完成处理程序不会在主线程中调用。
根据 UIKit 指南,您的 UI 代码需要 运行 在主线程上。您应该可以使用 DispatchQueue.main.async { ... }