मैं अपने प्रोजेक्ट में स्ट्राइप जोड़ने पर काम कर रहा हूं। इससे कहीं अधिक कोड है, लेकिन स्ट्राइप और इनिट में जोड़ने से पहले यह सब काम कर रहा था। यह वह init है जिसे स्ट्राइप उनके डॉक्स में उपयोग करने के लिए कहता है

यहाँ मेरा प्रारंभिक कोड और init कोड है:

class BusinessOwnerVC: UIViewController, MyProtocol {

let paymentContext: STPPaymentContext


init() {
    let customerContext = STPCustomerContext(keyProvider: SwiftAPI())
    self.paymentContext = STPPaymentContext(customerContext: customerContext)
    super.init(nibName: nil, bundle: nil)
    self.paymentContext.delegate = self
    self.paymentContext.hostViewController = self
    self.paymentContext.paymentAmount = 5000 // This is in cents, i.e. $50 USD
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
.....

मैं स्टोरीबोर्ड का उपयोग कर रहा हूं, जैसा कि मैंने सुना है कि यह मायने रखता है। जब मैं कोड चलाता हूं, तो घातक त्रुटि फेंक दी जाती है और ऐप को क्रैश कर देती है। द स्ट्राइप उदाहरण प्रोजेक्ट में यह है वहां सटीक कोड, और यह काम करता है।

मेरा ऐप क्रैश क्यों हो रहा है? यह आवश्यक init भी क्या कर रहा है? मुझे लगता है कि मैं समझता हूं कि मुझे इसकी आवश्यकता क्यों है, लेकिन यदि आप उप-वर्गों के लिए इसकी आवश्यकता से अधिक विस्तृत कर सकते हैं, तो यह सहायक होगा।

0
ATCraiger 2 पद 2020, 07:48

1 उत्तर

सबसे बढ़िया उत्तर

मेरी समस्या का समाधान init को हटा रहा था और केवल उपयोगकर्ता को आवश्यक init, जैसे:

 required init?(coder aDecoder: NSCoder) {
    //fatalError("init(coder:) has not been implemented")
    let customerContext = STPCustomerContext(keyProvider: SwiftAPI())
    self.paymentContext = STPPaymentContext(customerContext: customerContext)
    super.init(coder: aDecoder)
    self.paymentContext.delegate = self
    self.paymentContext.hostViewController = self
    self.paymentContext.paymentAmount = 5000 // This is in cents, i.e. $50 USD
}

मैंने टिप्पणी की fatelError भाग छोड़ दिया, लेकिन जैसा कि आप देख सकते हैं कि यह आवश्यक नहीं है। यह अन्य लोगों की तरह है, स्टोरीबोर्ड द्वारा आवश्यक इनिट का उपयोग किया जाता है और आपके पास यह होना चाहिए जब आप अपने स्टोरीबोर्ड वर्ग में डेटा सेट कर रहे हों, जैसे स्ट्राइप की आवश्यकता होती है। बस इसमें super.init है और आपको जाने के लिए तैयार होना चाहिए।

0
ATCraiger 7 जिंदा 2021, 18:28