当前位置: 首页 > 面试题库 >

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

谢同化
2023-03-14
问题内容

我决定继续与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。该方法是必需的,因为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将继承所需的所有初始化从超类 戴夫·伍德
在他指出的回答如下



 类似资料:
  • 问题内容: 我收到错误消息: 致命错误:尚未实现init(coder :) 按照我的习惯。该单元未注册,在情节提要中和使用dequeasreusablecell时具有标识符 单元 。在自定义单元格中,我的初始化为: 码: 但是我仍然有错误。谢谢。 问题答案: 将您的init替换为coder方法: 实际上,如果您在Storyboard中创建了单元格- 我认为应该将其附加到尝试在其上创建它的table

  • 当我试图创建一个新的空项目(或任何其他类型的项目)时,我在IntelliJ IDEA版本2017.3.5中得到错误int the title。到目前为止,我所做的是: > 从以下网址下载社区版本(不含jdk)https://www.jetbrains.com/idea/download/download-thanks.html?platform=linuxwithoutjdk&code=iic 将

  • 我正试图在谷歌地图Android API v2中获得一个带有自定义图标的标记。我刚刚更改了Google提供的一个示例。我添加了到方法中的RawMapViewDemoActivity 但我总是得到一个“IBitmapDescriptorFactory未初始化”。 在BitmapDescriptorFactory中,它说: 在使用此类中的任何方法之前,您必须执行以下操作之一以确保初始化此类: > 等待

  • 我有一个类,我注入到ViewModel ViewModel工厂,当在活动中的onCreate方法中初始化视图模型时,它说传递的值没有初始化。 下面是我的代码 我对Kotlin很陌生,所以尝试过调试,但在这个问题上卡住了。 这是Mainactive代码: 我的ViewModelFactory: 我的班级回购: 这是我收到的错误:

  • Android Studio不再启动。上周五一切都很好。我尝试重新安装AS并重新启动。我正在使用Mac OS X Yosemite。以下是错误消息: 内部错误。请向报告https://code.google.com/p/android/issues 有人能帮忙吗?

  • 我正在尝试为大学的一个项目和几个学生一起建立一个Springmvc应用程序,这是一本基于网络的烹饪书。 虽然Hello World工作正常,但我们使用hibernate存储数据的代码出现了一些困难的异常。 域类: 服务类: 控制器类: 我们使用基于eclipse的Spring工具包sdk并在启动过程中获得以下异常: VMware vFabric tc Runtime 2.9.3.Release/7