一尘不染

致命错误:对类使用未实现的初始化程序“ init(coder :)”

swift

我决定继续与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.
    }
    */
}

请提出一些建议


阅读 342

收藏
2020-07-07

共1个答案

一尘不染

问题

这是由于init?(coder aDecoder:NSCoder)目标上没有初始化程序引起的UIViewController。该方法是必需的,因为UIViewControllerUIStoryboard调用实例化a

为什么Objective-C没问题?

因为 Objective-C 自动继承所有必需的UIViewController初始化程序。

Swift为什么不自动继承初始化程序?

*出于安全考虑,默认情况下 *Swift
不会继承初始化程序。但是,如果所有属性都有一个值(或可选),并且子类未定义任何指定的初始化器,它将从超类继承所有初始化器。


1.第一种方法

init?(coder aDecoder: NSCoder)在目标上手动实施UIViewController

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

2.第二种方法

删除init(nibName nibNameOrNil: String?, bundle nibBundleOrNil:NSBundle?)你的目标UIViewController将继承所需的所有初始化从超类 戴夫·伍德
在他指出的回答如下


2020-07-07