Ios 将对象分配给可选委托会导致EXC\u访问错误
我为SKProductRequest.delegate分配了一个对象,并得到一个运行时错误:EXC\u BAD\u ACCESSIos 将对象分配给可选委托会导致EXC\u访问错误,ios,swift,delegates,optional,Ios,Swift,Delegates,Optional,我为SKProductRequest.delegate分配了一个对象,并得到一个运行时错误:EXC\u BAD\u ACCESS public class MyDelegate : NSObject, SKProductsRequestDelegate { public func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { // ...
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,那么错误会再次发生
有人知道为什么会发生这种情况吗?
SKProductsRequest
s委托将不会保留您的产品请求委托
,因此您必须自己保留。这就是为什么如果您在request.start()
处添加断点,您仍然可以看到正在设置的委托,但是当方法sendProdRequest()
完成时,ProductsRequestDelegate
没有保留任何内容,它会被释放
尝试将var productRequestDelegate
添加到定义了sendProdRequest()
的对象中,然后执行以下操作:
let request = SKProductsRequest(productIdentifiers: ProductType.all)
productRequestDelegate = ProductsRequestDelegate(completion)
request.delegate = productRequestDelegate
request.start()
显示有关
ProductsRequestDelegate
的更多详细信息。productRequestDelegate在func中不作为本地变量工作。它作为一个类变量工作。只要有办法以某种方式保留它,您甚至可以让ProductsRequestDelegate
对象保留自己,并在请求完成后释放