应用内购买:视图消失时崩溃
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 商店获取产品时应用内购买崩溃