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

Posted

技术标签:

【中文标题】应用内购买:视图消失时崩溃【英文标题】:In-App Purchases: Crash when view disappear 【发布时间】:2011-11-29 01:43:23 【问题描述】:

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

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

我必须取消 viewDidDisappear 中的请求? [productsRequest cancel] 此代码崩溃。

【问题讨论】:

我也有同样的问题。这是一个苹果错误,因为他们实现了强制委托。 【参考方案1】:

我也有同样的问题。 要修复它,请取消请求,一切都会好起来的。

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()

当视图控制器消失时:

 override func viewDidDisappear(animated: Bool) 
        super.viewDidDisappear(animated)
        request.delegate = nil;
        request.cancel()
        SKPaymentQueue.defaultQueue().removeTransactionObserver(self)
    

【讨论】:

【参考方案2】:

您的问题可能与应用内购买无关。在您的代码中的某处,您正在向已发布的对象发送消息。运行分析器可以帮助您找到错误,但这次可能没有必要。如果 [productsRequest cancel] 崩溃,则可能是 productsRequest 的保留计数太低。

【讨论】:

【参考方案3】:

删除TransactionObserver 而你的viewDidDisappear

[[SKPaymentQueue defaultQueue]removeTransactionObserver:self];

如果你从 Inapp 视图控制器返回到另一个视图控制器,那么

[[SKPaymentQueue defaultQueue]removeTransactionObserver:self];
[self dismissViewControllerAnimated:YES completion:NULL];

【讨论】:

以上是关于应用内购买:视图消失时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 中从 Play 商店获取产品时应用内购买崩溃

在 iTunes Connect 中添加新的应用内购买时保存按钮消失

更新应用内购买价格

应用程序加载器 inapp 购买导入消失了

iOS App 仅在实时 IAP 购买初始化时崩溃

应用内购买错误现已修复,但对于以前受影响的用户仍会崩溃