iOS 应用内购买 - 无法解锁内容,因为该功能在另一个视图控制器中

iOS In-app purchase - unable to unlock the content as the function is in another view controller

我已经使用 'IAPHelper' class 设置了应用内购买。我可以从 App Store 检索正确的信息并将其显示在一个 VC 中。一旦用户在 VC 中选择了所需的购买项目,详细信息就会显示在下一个名为 'Review' 的视图控制器上。这是实际购买发生的地方。我有一个 'buyProduct' 函数,在这篇评论VC 中运行良好,并将产品付款发送到 IAPHelper class 的 SKPaymentTransactionObserver 的 paymentQueue。 我需要通过 'Review VC' 中的弹出窗口解锁内容,一旦购买状态在 SKPaymentTransactionObserver 中显示为 'purchased',它就会出现,所以我尝试了很多方法将此功能作为'purchased' 的 paymentQueue 状态,但应用程序在成功付款后总是崩溃,一旦它到达显示 PopUp 的功能。 这是一些代码 - 我不会包含所有 IAPHelper 代码,只包含相关部分:

open class IAPHelper: NSObject { ......
var review: ReviewVC! ...... }

extension IAPHelper: SKPaymentTransactionObserver {

    public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for trans in transactions {
            print("func IAPHelper = \(trans.transactionState.status(), trans.payment.productIdentifier)")
            switch trans.transactionState {
            case .purchasing: break
            case .purchased: complete(transaction: trans)
                break
            case .failed : fail(transaction: trans)
            case .restored : restore(transaction: trans)
            case .deferred : break
           // default: queue.finishTransaction(trans)
            }
        }
    }

    func complete(transaction: SKPaymentTransaction) {
        deliverPurchaseNotificationFor(identifier: transaction.payment.productIdentifier)
        SKPaymentQueue.default().finishTransaction(transaction)
        review.showSuccessPopUp() //***ERROR IS HERE***Thread 1: EXC_BREAKPOINT (code=1, subcode=0x10426ac70)*****

    }

这是 ReviewVC 文件中的代码:-

class ReviewVC: UIViewController {
 @IBAction func buyTestButton(_ sender: Any) {
        print("Buy button pressed - products = \(products?.localizedTitle ?? "No Product")")
        buyProduct()
    }

    func buyProduct() {
        let payment = SKPayment(product: products!)
        SKPaymentQueue.default().add(payment as SKPayment)

    }


    //SUCCESSFUL PURCHASE:-
    func showSuccessPopUp() {
        UIView.animate(withDuration: 0.4) {
            self.hideView.isHidden = false
        }
        UIView.animate(withDuration: 0.8) {
            self.successPopUp.isHidden = false
        }
    }

几天来一直坚持这个问题,所以任何帮助将不胜感激!!

问题是 reviewnil

您将其声明为变量 var review: ReviewVC! 但是,您从未对其进行初始化。

初始化类似于review = Something

不确定您的代码在哪里调用 IAP() 但无论它在哪里,我都会做类似的事情:

var iap = IAP()
iap.review = self //if you are in the review class. 

很难说,因为我不确定您在哪里声明 IAP 对象。