从闭包中调用 "fulfill" 时出错
Error calling "fulfill" from closure
这是我的错误...
Thread 1: EXC_BAD_ACCESS (code=1, address=0x18)
这是我的产品请求代表...
class ProductRequestDelegate : NSObject, SKProductsRequestDelegate {
private var products: ([SKProduct]) -> Void
init(products: @escaping ([SKProduct]) -> Void) {
self.products = products
}
public func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
products(response.products)
}
public func request(_ request: SKRequest, didFailWithError error: Error) {
}
}
这是请求...
fileprivate var productsRequest: SKProductsRequest?
public func getProducts() -> Promise<Set<SKProduct>> {
return Promise { fulfill, reject in
productsRequest?.cancel()
productsRequest = SKProductsRequest(productIdentifiers: productIdentifiers)
productsRequest!.delegate = ProductRequestDelegate { products in
self.productsRequest = nil
fulfill(Set(products))
}
productsRequest!.start()
}
}
此调用导致发生错误...
_ = iAPHelper.getProducts()
知道为什么这不起作用吗?委托似乎被释放了。
SKProductsRequest
上的委托 属性 是 unowned(unsafe)
,因此分配给它的对象被释放。 (仪器在打开僵尸后通知我重新分配。)
因此,我向包含函数 getProducts()
的 class 添加了对委托的引用。并且有效。
这是我的错误...
Thread 1: EXC_BAD_ACCESS (code=1, address=0x18)
这是我的产品请求代表...
class ProductRequestDelegate : NSObject, SKProductsRequestDelegate {
private var products: ([SKProduct]) -> Void
init(products: @escaping ([SKProduct]) -> Void) {
self.products = products
}
public func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
products(response.products)
}
public func request(_ request: SKRequest, didFailWithError error: Error) {
}
}
这是请求...
fileprivate var productsRequest: SKProductsRequest?
public func getProducts() -> Promise<Set<SKProduct>> {
return Promise { fulfill, reject in
productsRequest?.cancel()
productsRequest = SKProductsRequest(productIdentifiers: productIdentifiers)
productsRequest!.delegate = ProductRequestDelegate { products in
self.productsRequest = nil
fulfill(Set(products))
}
productsRequest!.start()
}
}
此调用导致发生错误...
_ = iAPHelper.getProducts()
知道为什么这不起作用吗?委托似乎被释放了。
SKProductsRequest
上的委托 属性 是 unowned(unsafe)
,因此分配给它的对象被释放。 (仪器在打开僵尸后通知我重新分配。)
因此,我向包含函数 getProducts()
的 class 添加了对委托的引用。并且有效。