应用内购买:视图消失时崩溃

时间:2011-10-01 14:41:47

标签: ios objective-c in-app-purchase

我的应用程序有一个包含4个视图控制器的标签栏。第三个视图控制器包含“商店应用内购买”。在这个控制器中,我使用一个管理应用内购买的对象(产品请求,购买,交易等......),这些对象允许我获取并显示价格描述ecc。

问题是:如果我在请求启动时更改标签,应用程序有时会崩溃,但并非总是如此。

我要在viewDidDisappear中取消请求吗? [productsRequest cancel]此代码崩溃。

3 个答案:

答案 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];