init(编码器:)尚未在swift中实现

时间:2014-10-28 16:06:16

标签: swift

我有这个类文件来接受信用卡付款

import UIKit
class PaymentViewController: UIViewController , PTKViewDelegate {

    var card : STPCard
    var PaymentView : PTKView
    var button   = UIButton.buttonWithType(UIButtonType.System) as UIButton

    init(PaymentView : PTKView , button : UIButton, card : STPCard) {
        self.PaymentView = PaymentView
        self.button = button
        self.card = card
        super.init()
    }
    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
}

当我构建它时,它工作正常,但当我在我的实际设备上执行它(运行它)时,我得到了

fatal error: init(coder:) has not been implemented.

有什么想法吗?

2 个答案:

答案 0 :(得分:13)

基于您已设置的继承层次结构。 PaymentViewController将继承3个init方法。 UIViewController提供init(nibName:bundle)作为其指定的初始值设定项。 UIViewController也符合NSCoding来自required init(coder:)的地方UIViewControllerNSObject也继承自init(),它提供了基本的init(coder:方法。

当您从.xib或storyboard实例化ViewController时,您遇到的问题源于init。调用此方法以取消归档.xib / storyboard对象。

来自文档:

  

iOS通过调用其initWithCoder:方法初始化新视图控制器。

您应该在init(nibName:bundle)方法中调用超类指定的初始值设定项,即init(coder:)注意:这两个参数都可以为零。您的super.init(coder:)覆盖也应调用{{1}}

答案 1 :(得分:8)

一个简单的解决方法:

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