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

Ios 应用内购买:视图消失时崩溃,ios,objective-c,in-app-purchase,Ios,Objective C,In App Purchase,我的应用程序有一个包含4个视图控制器的选项卡栏。第三个视图控制器包含“应用程序内商店购买”。在这个控制器中,我使用一个管理应用程序内购买(产品请求、购买、交易等)的对象,该对象允许我获取并显示价格描述ecc 问题是:如果我在请求启动时更改选项卡,应用程序有时会崩溃,但并非总是如此 我必须取消视图中的请求吗? [productsRequest cancel]此代码崩溃 您的问题可能与应用内购买无关。在代码的某个地方,您正在向已释放的对象发送消息。运行分析器可以帮助您找到bug,但这次可能没有必要。

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

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

我必须取消视图中的请求吗?
[productsRequest cancel]此代码崩溃

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

在您的
视图消失时,删除
TransactionObserver

[[SKPaymentQueue defaultQueue]removeTransactionObserver:self];
如果从Inapp viewcontroller返回到另一个viewcontroller,则

[[SKPaymentQueue defaultQueue]removeTransactionObserver:self];
[self dismissViewControllerAnimated:YES completion:NULL];
我也有同样的问题。 若要修复它,请取消请求,然后一切正常

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