我的应用程序有一个包含4个视图控制器的标签栏。第三个视图控制器包含“商店应用内购买”。在这个控制器中,我使用一个管理应用内购买的对象(产品请求,购买,交易等......),这些对象允许我获取并显示价格描述ecc。
问题是:如果我在请求启动时更改标签,应用程序有时会崩溃,但并非总是如此。
我要在viewDidDisappear中取消请求吗? [productsRequest cancel]此代码崩溃。
答案 0 :(得分:2)
我有同样的问题。 要解决它取消请求,一切都很好。
var request: SKProductsRequest! //global to cancel when disappear
//request products when you want (viewDidLoad for example)
request = SKProductsRequest(productIdentifiers: productID as! Set<String>)
request.delegate = self
request.start()
当disapear viewcontroller:
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated)
request.delegate = nil;
request.cancel()
SKPaymentQueue.defaultQueue().removeTransactionObserver(self)
}
答案 1 :(得分:0)
您的问题可能与应用内购买无关。在代码中的某处,您将向已发布的对象发送消息。运行分析器可以帮助您找到错误,但这次可能没有必要。如果[productsRequest cancel]崩溃,那么productsRequest的保留计数可能太低了。
答案 2 :(得分:-1)
在TransactionObserver
:
viewDidDisappear
[[SKPaymentQueue defaultQueue]removeTransactionObserver:self];
如果从Inapp视图控制器返回到另一个视图控制器,那么</ p>
[[SKPaymentQueue defaultQueue]removeTransactionObserver:self];
[self dismissViewControllerAnimated:YES completion:NULL];