我有一個擴展UINavigationController
類。從UINavigationController的繼承斯威夫特
class MyNavigationController: UINavigationController {
var reservationId: Int
var blankViewController: BlankViewController
init(clientId aClientId: Int, reservationId aReservationId: Int) {
blankViewController = BlankViewController()
clientId = aClientId
reservationId = aReservationId
super.init(rootViewController: blankViewController)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
這是書中的事情。我指定的初始化器正在調用超類指定的初始化器。但是,在運行時應用程序崩潰與此消息:
fatal error: use of unimplemented initializer
'init(nibName:bundle:)' for class 'MyiOSApp.MyNavigationController'
經過反覆試驗,我做的問題,通過這樣做,而不是消失。
init(clientId aClientId: Int, reservationId aReservationId: Int) {
blankViewController = BlankViewController()
clientId = aClientId
reservationId = aReservationId
super.init(nibName: nil, bundle: nil)
}
但是init(nibName: nil, bundle: nil)
不是直接超類的指定初始值設定項。從技術上講,這不應該編譯。所以我非常困惑。第一個代碼違反了什麼具體規則?如果我確實打破了一些規則,爲什麼編譯器不抓住它呢?
一個可能的解釋是,init(nibName:, bundle:)
是必需的初始化。但是這個解釋有問題。從我所看到的init(nibName:, bundle:)
,init(rootViewController:)
和init?(coder:)
是不如文檔或在Xcode源代碼視圖中所需的有關。出於某種原因,編譯器認爲init?(coder:)
是必需的,但對於其他init方法則不這樣。所有這些都很奇怪。
編輯:很多你的答案張貼說如何得到這個工作的。我的問題不在於此。我已經可以像這樣在我的問題中注意到了這一點。我的問題是關於Swift初始化規則,以及我可能違反的規則。
@ Paulw11崩潰是不是在''的init(編碼器)''。請參閱崩潰錯誤消息。謝謝。 – RajV
您沒有實現其他所需的初始化程序 - init(nibName,bundle) - 這是['UIViewController'](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621359-init)所需的 – Paulw11