我有这个类文件来接受信用卡付款
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 :(得分:13)
基于您已设置的继承层次结构。 PaymentViewController
将继承3个init方法。
UIViewController
提供init(nibName:bundle)
作为其指定的初始值设定项。
UIViewController
也符合NSCoding
来自required init(coder:)
的地方UIViewController
。
NSObject
也继承自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)
}