gpt4 book ai didi

ios - SKProductsRequestDelegate 方法未在类内调用

转载 作者:搜寻专家 更新时间:2023-11-01 06:03:09 25 4
gpt4 key购买 nike

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

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

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 方法。这与委托(delegate)有关吗?

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

最佳答案

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

来自SKProductsRequest class documentation :

Be sure to keep a strong reference to the request object; otherwise, the system might deallocate the request before it can complete.

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

private let request: SKProductsRequest!

通过实现此委托(delegate)方法跟踪任何与请求相关的错误也是一个好主意:

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

关于ios - SKProductsRequestDelegate 方法未在类内调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44555271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com