我在故事板中有一些带有某些标识符的viewcontrollers,当我尝试像这样访问它们时:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<property name="url" value="jdbc:hsqldb:file:data/chefdb;hsqldb.write_delay=false" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
该应用程序崩溃。该行检测到该值为零。打开时,有人可以解释这是怎么回事吗?
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)
}
经过几次尝试,我设法摆脱了致命的错误。但是,在点击表视图项时,视图控制器仍然不会出现。
答案 0 :(得分:0)
let viewController: UIViewController!
是Optional
,这个!
你只是告诉编译器“我知道这可能是零但不要担心,在运行时它永远不会是零”。
如果你想摆脱这个Optional
,你必须打开故事板:
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)
}
答案 1 :(得分:0)
嗯,该项目有点“混乱”: - )
首先:你需要以某种方式获得“{”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”的视图控制器的类型为EngineTunningParamteres
,派生自UINavigationController
。您无法将导航控制器推送到现有导航控制器。因此,我们也必须改变课程:
class EngineTunningParamteres: UIViewController {
override func viewDidLoad() {
print("hi") }
}
现在它有效。不客气。