我有一个UINavigationController子类:
fileprivate class NavController: UINavigationController {
override init(navigationBarClass: AnyClass?, toolbarClass: AnyClass?) {
super.init(navigationBarClass: navigationBarClass, toolbarClass: toolbarClass)
...
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
...
}
我将此类实例化为:
navController = NavController(navigationBarClass: nil, toolbarClass: nil)
这是编译,但在运行时失败:
AppDelegate.swift: 87: 19: fatal error: use of unimplemented initializer 'init(nibName:bundle:)' for class 'NavController'
当我指定关键字 navigationBarClass:和 toolbarClass: init(nibName:bundle :) >
如果我从子类中删除所有初始化程序,它可以正常工作,这会让人感到困惑,因为重写一个只调用super的方法/初始化程序应该是noop。
第87行是声明类的行。我尝试使用调试器,但我无法进入UIKit代码,只能使用我的代码。
如果这很重要,这是在iOS 10和Swift 3上。
答案 0 :(得分:1)
问题源于init
的生命周期,因为如果在覆盖所有init(nibName:bundle:)
init(navigationBarClass:toolbarClass:)
时打印函数,控制台将如下所示:
init(nibName:bundle:)
所以你还必须首先调用class NavController: UINavigationController {
/* Properties */
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
override init(navigationBarClass: AnyClass?, toolbarClass: AnyClass?) {
super.init(navigationBarClass: navigationBarClass, toolbarClass: toolbarClass)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension NavController {
/* Methods */
}
,如下所示:
private StudentDatabaseEntities db = new StudentDatabaseEntities();
public List<StudentDatabaseDbTableModel> AllProducts()
{
return db.StudentDatabaseDbTableModel.ToList();
}