Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.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 使用swift的DestinationViewController Segue和UINavigationController_Ios_Swift_Xcode_Uinavigationcontroller_Segue - Fatal编程技术网

Ios 使用swift的DestinationViewController Segue和UINavigationController

Ios 使用swift的DestinationViewController Segue和UINavigationController,ios,swift,xcode,uinavigationcontroller,segue,Ios,Swift,Xcode,Uinavigationcontroller,Segue,我建立了一个侧菜单,当你点击一个工具栏按钮时会弹出, 单击其中一个菜单选项后,视图控制器将加载正确的数据,但条形按钮项将消失。所以我做了一些研究 我发现问题出在我的segue目的地,我的segue目的地是视图控制器,而不是导航控制器,所以我尝试更改代码,结果是: override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let cell = sender as? UITableViewCell{

我建立了一个侧菜单,当你点击一个工具栏按钮时会弹出, 单击其中一个菜单选项后,视图控制器将加载正确的数据,但条形按钮项将消失。所以我做了一些研究 我发现问题出在我的segue目的地,我的segue目的地是视图控制器,而不是导航控制器,所以我尝试更改代码,结果是:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if let cell = sender as? UITableViewCell{
            let i = tableView.indexPath(for: cell)!.row
            if segue.identifier == "viewController"{

                let nav = segue.destination as! UINavigationController
                let addEventViewController = nav.topViewController as! ViewController

                addEventViewController.varView = i
                }  
            }
        } 
现在我得到了这个错误:

Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
我的故事板:

请按以下方式更新您的代码。 这里sharedAppdelegate()是appdelegate的共享实例

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if let cell = sender as? UITableViewCell{
        let i = tableView.indexPath(for: cell)!.row
        if segue.identifier == "viewController"{

            let yourDestinationController = segue.destination as! ViewController
            let nav = UINavigationController.init(rootViewController: yourDestinationController)
            let win = AppDelegate.sharedAppdelegate().window
            win.rootViewController = nav
            win?.makeKeyAndVisible()
            addEventViewController.varView = i
            }  
        }
    } 
在您的Appdelegate中,添加以下方法

 static func sharedAppdelegate() -> AppDelegate
{
    return UIApplication.shared.delegate as! AppDelegate
}

我认为问题在于,你从BackTableVC调用segue,没有导航控制器的segue,只有位于故事板右下角的控制器。您必须在RevealViewController上执行segue,或者重新链接segue,使其指向导航控制器。

摆脱这些!使用条件转换和调试器查看哪些内容不是您认为的内容。您在哪一行得到此错误?@AhmetUstem在这一行中让nav=segue.destination为!UINavigationController您可能无法使用segues构建侧菜单。您可能只需要根据需要操纵视图层次结构。您可以将主视图控制器设置为容器视图,只需将活动视图控制器设置为您编辑问题并将其更改为完全不同的内容-人们已经为您的问题编写了答案和评论,现在他们的答案不再相关。您应该还原编辑并打开一个新问题。在let-win行类型“AppDelegate”上获取此错误在我的视图控制器上没有成员“sharedAppdelegate”。我有以下行:self.view.AddgestureRecognitizer(self.ReveliveViewController().PangestureRecognitizer())我得到了这个错误:线程1:致命错误:在解包一个可选值时意外地发现了nil,当我解包这个时,我找不到任何nil值(当im单击其中一个菜单选项时发生)