提问者:小点点

在尝试将segue或实例化到vc时获取初始化错误


因此,我的目标是将数据传输到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是怎么没有初始化的,我以前很好地使用过它。有人知道我该怎么解决这个问题吗?


共1个答案

匿名用户

出故事板时,调用的是initWithCoder:而不是您的init()函数,initWithCoder的实现在初始化所有属性之前调用super

创建一个名为commonInit的函数并让所有不同的initWith调用commonInit可能会有帮助,这样您的视图控制器就可以编程地或从nibs等实例化