2011-10-01 10 views
0

私のアプリケーションには、4つのビューコントローラを含むタブバーがあります。 3番目のView Controllerには、「ストア内アプリ購入」が含まれています。このコントローラーでは、私は価格記述eccを取得して表示することができるアプリ内購入(商品要求、購入、取引など)を管理するオブジェクトを使用します。アプリ内購入:表示が消えるとクラッシュする

問題は次のとおりです。要求が開始されている間にタブを変更すると、アプリがクラッシュすることがありますが、必ずしもそうではありません。

viewDidDisappearでリクエストをキャンセルしましたか? [productsRequest cancel]このコードはクラッシュします。

+0

は、私は同じ問題を抱えています。フォースデリゲートを実装しているため、Appleのバグです。 –

答えて

0

あなたの問題はおそらくアプリ内購入とは関係ありません。あなたのコードのどこかで、リリースされたオブジェクトにメッセージを送ります。アナライザーを実行すると、バグを見つけるのに役立ちますが、今回は必要ないかもしれません。 [productsRequest cancel]がクラッシュした場合、おそらくproductsRequestの保持カウントが低すぎます。

-1

はあなたviewDidDisappearながらTransactionObserverを削除します。

[[SKPaymentQueue defaultQueue]removeTransactionObserver:self]; 

あなたが別のViewControllerに戻っInappのViewControllerをから行く場合は、

[[SKPaymentQueue defaultQueue]removeTransactionObserver:self]; 
[self dismissViewControllerAnimated:YES completion:NULL]; 
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() 

そして

はdisapearのViewController:

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