我将一个对象分配给SKProductRequest.delegate,并出现运行时错误:EXC_BAD_ACCESS。
public class MyDelegate : NSObject, SKProductsRequestDelegate {
public func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
// ...
}
}
func sendProdRequest() {
let request = SKProductsRequest(productIdentifiers: ProductType.all)
request.delegate = ProductsRequestDelegate(completion)
request.start()
}
如果我在request.start()处设置断点并在控制台中打印request.delegate,则代码可以正常运行。但是,如果我在不打印request.delegate的情况下中断,则会再次发生错误。
任何人都知道为什么会这样?
答案 0 :(得分:1)
SKProductsRequest
代表将不会保留您的ProductsRequestDelegate
,因此您必须自行保留request.start()
。这就是为什么如果你在sendProdRequest()
添加一个断点,你仍然可以看到正在设置委托,但是当方法ProductsRequestDelegate
完成时,没有任何东西保留在var productRequestDelegate
上,它就会得到解除分配。
尝试将sendProdRequest()
添加到定义了let request = SKProductsRequest(productIdentifiers: ProductType.all)
productRequestDelegate = ProductsRequestDelegate(completion)
request.delegate = productRequestDelegate
request.start()
的对象,然后执行:
.human {
background-color: white;
}
.human__arm {
background-color: white;
}