Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.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 展开视图控制器值时发生致命错误_Ios_Swift - Fatal编程技术网

Ios 展开视图控制器值时发生致命错误

Ios 展开视图控制器值时发生致命错误,ios,swift,Ios,Swift,我在序列图像板中有一些带有特定标识符的ViewController,当我尝试这样访问它们时: override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let mainViewController = sideMenuController! let vcName = identities[indexPath.row] let viewController

我在序列图像板中有一些带有特定标识符的ViewController,当我尝试这样访问它们时:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let mainViewController = sideMenuController!
    let vcName = identities[indexPath.row]
    let viewController: UIViewController! = storyboard?.instantiateViewController(withIdentifier: vcName)
    let navigationController = mainViewController.rootViewController as! NavigationController
    navigationController.pushViewController(viewController, animated: true)
    mainViewController.hideLeftView(animated: true, completionHandler: nil)

}
应用程序崩溃了。此行检测到值为零。有人能解释为什么在拆开包装时这是零吗

navigationController.pushViewController(viewController, animated: true)
经过几次尝试,我终于摆脱了致命的错误。但是,点击表格视图项时,视图控制器仍然不会出现

  • 原始项目-

  • 编辑项目-

是一个
可选的
,带有此
您只是告诉编译器“我知道这可能是零,但别担心,在运行时它永远不会是零”

如果你想摆脱这个
可选的
,你必须打开故事板:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let mainViewController = sideMenuController!
    let vcName = identities[indexPath.row]
    let viewController = storyboard!.instantiateViewController(withIdentifier: vcName)
    let navigationController = mainViewController.rootViewController as! NavigationController
    navigationController.pushViewController(viewController, animated: true)
    mainViewController.hideLeftView(animated: true, completionHandler: nil)

}

嗯,这个项目有点“混乱”:-)

首先:您需要以某种方式获取“UINavigationController”(或派生类)

由于您的
LeftViewController
不在导航堆栈上,因此它没有设置navigationController。因此,您需要从
mainViewController
获取它:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    print(storyboard)
    let mainViewController = sideMenuController!
    let vcName = identities[indexPath.row]
    let viewController: UIViewController! = storyboard.instantiateViewController(withIdentifier: vcName)
    print(viewController)
    if let theNavigationController = mainViewController.rootViewController as? UINavigationController {
        print("Gotcha")
        theNavigationController.pushViewController(viewController!, animated: true)
        mainViewController.hideLeftView(animated: true, completionHandler: nil)
    }

}
第二次,仍然存在一个问题:

标识符为“A”的视图控制器的类型为
EngineTunningParameters
,从
UINavigationController
派生。不能将导航控制器推送到现有导航控制器上。因此,我们也必须改变课程:

class EngineTunningParamteres: UIViewController {

    override func viewDidLoad() {
        print("hi")    }

}

现在它起作用了。不客气。

您还没有打开它,您只是声明UIViewController不会为零,您需要将!在故事板的结尾?。实例化eviewController(名称)!可能是
storyboard?.instanceeviewcontroller(带标识符:vcName)
返回
nil
@SeanLintern88我无法强制展开非可选类型。@我想为什么它会返回nil?所有视图控制器都分配了正确的情节提要索引。您确定情节提要不是零吗?非常感谢。即使话题偏离了你帮助的致命错误!
class EngineTunningParamteres: UIViewController {

    override func viewDidLoad() {
        print("hi")    }

}