我决定继续与Swift一起完成剩余的项目。当我将自定义类(的子类UIViewcontroller)添加到情节提要视图控制器并加载项目时,该应用突然崩溃,并出现以下错误:
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 。
init?(coder aDecoder:NSCoder)
UIViewController
UIStoryboard
因为 Objective-C 自动继承所有必需的UIViewController初始化程序。
*出于安全考虑,默认情况下 *Swift 不会继承初始化程序。但是,如果所有属性都有一个值(或可选),并且子类未定义任何指定的初始化器,它将从超类继承所有初始化器。
init?(coder aDecoder: NSCoder)在目标上手动实施UIViewController
init?(coder aDecoder: NSCoder)
required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) }
删除init(nibName nibNameOrNil: String?, bundle nibBundleOrNil:NSBundle?)你的目标UIViewController将继承所需的所有初始化从超类 戴夫·伍德 在他指出的回答如下
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil:NSBundle?)