2011-10-01 68 views
0

我的應用程序有一個包含4個視圖控制器的tabbar。第三個視圖控制器包含「存儲應用內購買」。在此控制器中,我使用管理應用內購買(產品請求,購買,交易等)的對象,這些對象允許我獲取並顯示價格描述ecc。應用內購買:視圖消失時崩潰

問題是:如果我在更改標籤的同時請求啓動,應用程序有時會崩潰,但並非總是如此。

我必須在viewDidDisappear中取消請求嗎? [productsRequest取消]此代碼崩潰。

+0

我有同樣的問題。這是一個蘋果的錯誤,因爲他們實施強制委託。 –

回答

0

您的問題可能與應用內購買無關。在你的代碼中的某個地方,你正在發送一條消息給一個已經發布的對象。運行分析器可以幫助您找到該錯誤,但這次可能不需要。如果[productsRequest cancel]崩潰,那麼產品請求的保留計數可能太低。

-1

取出TransactionObserver,而你viewDidDisappear

[[SKPaymentQueue defaultQueue]removeTransactionObserver:self]; 

如果你去從應用程式內的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視圖 - 控制:

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