因此,我的目标是将数据传输到Stripe为其API提供的CheckOutViewController()
。因此,正常情况下,我转到storyboards并将一个新的vc与CheckoutViewController()
类连接起来,这样我就可以从另一个vc转到它并进行数据传输。
在此之前,我只是在推动vc,它工作正常,并且知道我可以实例化它并进行数据传输,但即使当我尝试这样做时,我也会得到一个致命的错误:
Fatal error: init(coder:) has not been implemented
这是我在checkoutvc
中的代码:
let paymentContext: STPPaymentContext?
let config: STPPaymentConfiguration
let customerContext = STPCustomerContext(keyProvider: MyAPIClient())
init() {
let config = STPPaymentConfiguration()
let paymentContext = STPPaymentContext(customerContext: customerContext, configuration: config, theme: .defaultTheme)
config.requiredBillingAddressFields = .name
self.paymentContext = paymentContext
self.config = config
super.init(nibName: nil, bundle: nil)
self.paymentContext?.delegate = self
self.paymentContext?.hostViewController = self
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
我更改了required init
是因为我读了这篇关于init错误的文章,但现在它在运行之前就给出了一个错误:
Property 'self.paymentContext' not initialized at super.init call
在我将这个类连接到故事板中的vc之前,这一切都是正常的,但我实际上没有选择,我需要做一个数据传输,以便用户支付正确的金额。我不明白self.paymentcontext
是怎么没有初始化的,我以前很好地使用过它。有人知道我该怎么解决这个问题吗?
出故事板时,调用的是initWithCoder:而不是您的init()函数,initWithCoder的实现在初始化所有属性之前调用super
创建一个名为commonInit的函数并让所有不同的initWith调用commonInit可能会有帮助,这样您的视图控制器就可以编程地或从nibs等实例化