我决定继续与Swift一起完成剩余的项目。当我将自定义类(的子类UIViewcontroller
)添加到情节提要视图控制器并加载项目时,该应用突然崩溃,并出现以下错误:
致命错误:对类使用未实现的初始化程序“ init(coder :)”
这是一个代码:
import UIKit
class TestViewController: UIViewController {
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
// Custom initialization
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// #pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
}
请提出一些建议
这是由于init?(coder aDecoder:NSCoder)
目标上没有初始化程序引起的UIViewController
。该方法是必需的,因为UIViewController
从UIStoryboard
调用实例化a
。
因为 Objective-C 自动继承所有必需的UIViewController
初始化程序。
*出于安全考虑,默认情况下 *Swift
不会继承初始化程序。但是,如果所有属性都有一个值(或可选),并且子类未定义任何指定的初始化器,它将从超类继承所有初始化器。
init?(coder aDecoder: NSCoder)
在目标上手动实施UIViewController
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
删除init(nibName nibNameOrNil: String?, bundle nibBundleOrNil:NSBundle?)
你的目标UIViewController
将继承所需的所有初始化从超类 戴夫·伍德
在他指出的回答如下