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