【问题标题】:SKProductsRequestDelegate method isn't being called inside classSKProductsRequestDelegate 方法未在类内部调用
【发布时间】:2023-03-06 07:27:02
【问题描述】:

我想在显示实际页面之前加载SKProducts。但是我在创建它时遇到了一些困难。

我的想法是创建另一个加载产品的类,如下所示:

class GetIapInfo: NSObject, SKProductsRequestDelegate {

    var list = [SKProduct]()
    var p = SKProduct()

    let audio = "com.xxx";
    let video = "com.xxx"
    let complete = "com.xxx"

    override init() {
        super.init()

        if SKPaymentQueue.canMakePayments() {
            print("starting IAPS")
            let productIdentifiers = Set([audio, vídeo, complete])

            let request = SKProductsRequest(productIdentifiers: productIdentifiers)
            request.delegate = self
            request.start()
        } else {
            print("please enable IAPS")
        }
    }

    internal func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        print("product request")
        let myProduct = response.products

        for product in myProduct {
            print("product added from ding")
            print(product.productIdentifier)
            print(product.localizedTitle)
            print(product.localizedDescription)
            print(product.price)
        } 
    }
}

但这仅调用init 方法,仅此而已,它不调用productsRequest 方法。这与委托有关吗?

我将如何保存将以该方法返回的产品?因为我以后需要它们。

【问题讨论】:

    标签: ios swift asynchronous delegates in-app-purchase


    【解决方案1】:

    您可能应该保留对您在GetIapInfo.init() 中创建的SKProductsRequest 对象的引用。当init 方法存在时,您当前的代码将释放 request 对象。这可以解释为什么你的代表根本没有被调用;)

    来自SKProductsRequest class documentation

    一定要保持对请求对象的强引用;否则,系统可能会在请求完成之前解除分配。

    例如,为其创建一个存储属性:

    private let request: SKProductsRequest!
    

    也可以通过实现此委托方法来跟踪任何与请求相关的错误:

    func request(_ request: SKRequest, didFailWithError error: Error) {
        print("Request failed: \(error)")
    }
    

    【讨论】:

    • 我已经尝试过您的解决方案,但它不起作用。它的作用与以前完全相同。你的解决方案对我来说很有意义。但不幸的是它不起作用。
    • @da1lbi3 当然,您还需要在调用代码中保留对创建的GetIapInfo 对象的引用。你在这样做吗?
    • 啊谢谢!我所做的是在没有强引用的情况下在 viewdidload 中实例化 GetIapInfo。这不起作用哈哈!现在我创建了一个强大的参考并且它可以工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 2012-02-21
    • 2023-03-23
    相关资源
    最近更新 更多