所以我试图从模型VC提示一个segue在根VC上运行但是当我尝试这样做时它给了我这个错误 - 警告:尝试呈现视图不在窗口层次结构中的vc 。我尝试了viewWIllAppear(),但这也行不通,因为我的VC只覆盖根vc视图的一半,因为它是一个侧边菜单。但是,在直接从根VC提示segue之后,它可以正常工作。
这是我的代码:
dismiss(animated: true) {
let vc = self.storyboard?.instantiateViewController(withIdentifier: "MainViewController") as? MainViewController
vc?.performSegue(withIdentifier: "ToSubmition", sender: self)
}
答案 0 :(得分:0)
首先尝试解除视图控制器:
dismiss(animated: true) {
self.dismiss(animated: true) {
self.performSegue(withIdentifier: "ToSubmition", sender: self)
}
}
答案 1 :(得分:0)
我认为你正试图从你的侧边菜单中呈现一个VC,这当然不能完成,因为视图不在窗口的层次结构中。您可以做的是在调用函数后使用NSNotificationCenter发布通知密钥并关闭侧边菜单。然后在您的主VC中,添加一个观察者并创建一个函数来执行您想要的segue。
您可以阅读Apple API reference有关如何实施NSNotification Center的信息。
答案 2 :(得分:0)
完成处理程序始终使用background thread
,进行UI更新或类似您的使用main thread
dismiss(animated: true) {
DispatchQueue.main.async {
let vc = self.storyboard?.instantiateViewController(withIdentifier: "MainViewController") as? MainViewController
vc?.performSegue(withIdentifier: "ToSubmition", sender: self)
}
}
如果失败则使用dispatch_after
并在执行segue
之前设置一些延迟。
dismiss(animated: true) {
let mainQueue = DispatchQueue.main
let deadline = DispatchTime.now() + .seconds(5)
mainQueue.asyncAfter(deadline: deadline) {
// ...perform segue
}
}
答案 3 :(得分:0)
好的,我明白了。您无法通过创建实例来调用另一个视图控制器。相反,我当时只调用了当前的VC
class myTransformer: ValueTransformer {
override func valueClassForBinding(_ binding: String) -> AnyClass? {
return NSString.self
}
override func transformedValue(_ value: Any?) -> Any? {
return "test"
}
}