2014-10-28 30 views
14

实现的(我有这个类文件受理银行卡支付初始化编码器:)尚未在迅速

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. 

任何想法?

+0

我知道,因为即FatalError线是做什么的,可是为什么我必须做必要的初始化,为什么它不只是快乐与初始化。 – Jason 2014-10-28 16:07:08

+0

实际的方法会抛出一个_fatal错误_...我不确定你真的期望从一个'fatalError()'行 - 你已经准确地知道该行应该做什么:一个_fatal error_ exception。你可以通过实现方法的主体来避免这种异常。 – holex 2014-10-28 16:31:31

+0

是的,我知道Holex,但我不知道为什么需要我需要,我应该把它放进去。 – Jason 2014-10-28 16:35:44

回答

10

根据您已设置的继承层次结构。 PaymentViewController将继承3个init方法。 UIViewController提供了init(nibName:bundle)作为其指定的初始化程序。 UIViewController也符合NSCoding这是required init(coder:)来自何处。 UIViewController也从NSObject继承,其提供了基本的init()方法。

当ViewController从.xib或storyboard中实例化时,你的问题源于init(coder:。调用此方法解除.xib/storyboard对象的存档。

从文档:方法代替:

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

你应该调用你的init方法,这是init(nibName:bundle)注超指定初始化:这是很好的这两个参数是零。此外,您的init(coder:)重写应调用super.init(coder:)

+0

那么代码是什么? @JMFR – DeveloperACE 2015-02-09 13:47:18

+13

'需要的init(编码器a解码器:NSCoder){super.init(编码器:解码器) } – JMFR 2015-02-09 13:53:48

5

简单的解决方法就可以了:

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