Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 警告:试图显示其视图不在窗口层次结构中的vc_Ios_Swift_Xcode_Uiviewcontroller_Swift3 - Fatal编程技术网

Ios 警告:试图显示其视图不在窗口层次结构中的vc

Ios 警告:试图显示其视图不在窗口层次结构中的vc,ios,swift,xcode,uiviewcontroller,swift3,Ios,Swift,Xcode,Uiviewcontroller,Swift3,因此,我试图从一个模型VC中提示一个segue在根VC上运行,但是当我尝试这样做时,它会给我一个错误警告:尝试呈现视图不在窗口层次结构中的VC。我尝试了viewWillAppease(),但也不起作用,因为我的VC只覆盖了根VC视图的一半,因为它是一个侧菜单。然而,在直接从根VC提示一个segue之后,它工作得很好 这是我得到的代码: dismiss(animated: true) { let vc = self.storyboard?.instantiateViewControlle

因此,我试图从一个模型VC中提示一个segue在根VC上运行,但是当我尝试这样做时,它会给我一个错误警告:尝试呈现视图不在窗口层次结构中的VC。我尝试了viewWillAppease(),但也不起作用,因为我的VC只覆盖了根VC视图的一半,因为它是一个侧菜单。然而,在直接从根VC提示一个segue之后,它工作得很好

这是我得到的代码:

dismiss(animated: true) {

    let vc = self.storyboard?.instantiateViewController(withIdentifier: "MainViewController") as? MainViewController
    vc?.performSegue(withIdentifier: "ToSubmition", sender: self)

}

首先尝试解除视图控制器:

dismiss(animated: true) {

    self.dismiss(animated: true) { 
        self.performSegue(withIdentifier: "ToSubmition", sender: self)
    }
}

我认为您试图从侧菜单中显示VC,当然这是不可能的,因为视图不在窗口的层次结构中。您可以使用NSNotificationCenter在调用该函数后发布通知键,并关闭侧菜单。然后在主VC中,添加一个观察者并创建一个函数来执行预期的segue

您可以阅读有关如何实施NSNotification Center的信息。

  • 完成处理程序总是使用
    后台线程
    ,使用
    主线程

    dismiss(animated: true) {
      DispatchQueue.main.async {
        let vc = self.storyboard?.instantiateViewController(withIdentifier: "MainViewController") as? MainViewController
        vc?.performSegue(withIdentifier: "ToSubmition", sender: self)
      }
    }
    
  • 如果失败,请在执行
    segue
    之前使用
    dispatch\u并设置一些延迟

    dismiss(animated: true) {
      let mainQueue = DispatchQueue.main
      let deadline = DispatchTime.now() + .seconds(5)
      mainQueue.asyncAfter(deadline: deadline) {
         // ...perform segue
      }
    }
    
  • 这是盲目的尝试

好吧,我想出来了。无法通过创建实例调用其他视图控制器。相反,我当时只是给现在的VC打了电话

dismiss(animated: true) {
        if let mainView = UIApplication.shared.keyWindow?.rootViewController as? MainViewController {
            mainView.ToSubmition()
        }
    }

我添加了我拥有的代码,它与你的代码类似,但仍然给出相同的错误。你在故事板中创建了手动序列吗?我不知道你为什么要实例化一个新的视图控制器,它应该已经在你的层次结构中了。我修改了我的答案。试着用我的代码完全替换你的代码。您不应该实例化另一个视图控制器。只要在情节提要中正确创建了手动序列,并且父视图控制器是层次结构中的下一个,我的代码就应该适用于您。但是,在取消后在侧菜单视图控制器上添加performSegue将不会运行。当我运行代码-()没有标识符为“ToSubmition”的segue时,我得到了这个错误。但是,当我将一段从侧菜单VC添加到另一个VC时,它表示侧菜单VC不再在视图层次结构中。您是否尝试过我的代码?我正在我的应用程序上做完全相同的事情。我有一个拆分视图控制器,我从左侧将其取消,并使用此代码返回到上一个VC。您的主VC嵌入到UINavigationController?您可能从viewdidload方法调用它,如果是这样,它将给出此代码warning@Mannopson是的,在故事板中,它设置为模型,并将代码添加到我的NavigationControllerPost在完成解除操作时将通知发送给MainVC。