猿问

致命错误:在课堂上使用未实现的初始化程序'init(coder :)'

我决定用Swift继续我剩下的项目。当我将自定义类(子类UIViewcontroller)添加到我的storyboard视图控制器并加载项目时,应用程序突然崩溃并出现以下错误:


致命错误:在课堂上使用未实现的初始化程序'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.

    }

    */

}

请提出建议


月关宝盒
浏览 626回答 3
3回答

湖上湖

问题这是由init?(coder aDecoder: NSCoder)目标上缺少初始化程序引起的UIViewController。该方法是必需的,因为UIViewController从UIStoryboard调用它实例化a 。看看我们如何初始化一个UIViewController从UIStoryboard,请大家看看这里为什么这不是Objective-C的问题?因为Objective-C自动继承所有必需的UIViewController初始值设定项。为什么Swift不会自动继承初始化器?默认情况下,Swift由于安全性而不继承初始值设定项。但是如果所有属性都有值(或可选)并且子类没有定义任何指定的初始化器,它将继承超类中的所有初始化器。解1.第一种方法手动实现init?(coder aDecoder: NSCoder)目标UIViewControllerrequired init?(coder aDecoder: NSCoder) {    super.init(coder: aDecoder)}2.第二种方法正如Dave Wood在下面的回答中指出的那样,删除init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)目标UIViewController将继承超类中所需的所有初始值设定项

慕妹3146593

除了@ 3r1d之外的另一个选择是从您的类中删除以下init方法:init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)    // Custom initialization}包括init方法,阻止子类继承init(coder aDecoder: NSCoder!)其超类。如果不包括它,你的班级将继承两者。注:有关更多详细信息,请参阅WWDC 2014 Session 403“Intermediate Swift”,大约33:50。

ITMISS

对于与swift存在相同问题的人UICollectionViewCells,请将@ 3r1d建议的代码添加到自定义UICollectionViewCell类而不是View Controller:init(coder aDecoder: NSCoder!){    super.init(coder: aDecoder)}
随时随地看视频慕课网APP

相关分类

iOS
我要回答