2017-05-13 6 views
2

でクラッシュ:アプリケーションは、私は私のアプリ内購入を作成するには、このコードを使用して、アプリ内購入のエラー

import UIKit 
import StoreKit 

class ViewController: UIViewController, SKProductsRequestDelegate, SKPaymentTransactionObserver, SKStoreProductViewControllerDelegate { 

var product_id: String? 
@IBOutlet weak var buyButton: UIButton! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    product_id = "product_id" 

    SKPaymentQueue.default().add(self) 
} 

@IBAction func unlockAction(sender: AnyObject) { 

    print("About to fetch the product...") 

    // Can make payments 
    if (SKPaymentQueue.canMakePayments()) 
    { 
     let productID:NSSet = NSSet(object: self.product_id!); 
     let productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>); 
     productsRequest.delegate = self; 
     productsRequest.start(); 
     print("Fetching Products"); 
    }else{ 
     print("Can't make purchases"); 
    } 

} 

func buyProduct(product: SKProduct){ 
    print("Sending the Payment Request to Apple"); 
    let payment = SKPayment(product: product) 

    SKPaymentQueue.default().add(payment); 

} 

func productsRequest (_ request: SKProductsRequest, didReceive response: SKProductsResponse) { 

    let count : Int = response.products.count 
    if (count>0) { 
     let validProduct: SKProduct = response.products[0] as SKProduct 
     if (validProduct.productIdentifier == self.product_id) { 
      buyProduct(product: validProduct); 

     } else { 
      print(validProduct.productIdentifier) 
     } 
    } else { 
     print("nothing") 
    } 
} 

しかし、私は二回ボタン(unlockAction)をクリックするか、1回クリックし、別のコントローラに移動し、リターン場合そしてもう一度、このライン上で私のアプリがクラッシュをクリックします。

SKPaymentQueue.default().add(payment); 

エラー(lldb)

でそれを修正する方法は?

答えて

1

viewWillDissappear()は、請求コントローラの機能に使用する必要があります。それを試してみてください。

override func viewWillDisappear(_ animated: Bool) { 
    SKPaymentQueue.default().remove(self) 
} 

私もこの問題を抱えており、問題が解決しました。

エラーは、コード内にSKPaymentQueue.default().add(payment)行のエラーがあります。したがって、このソリューションを試して、信頼できる生産プログラマーになることができます。 ハッピーは、私はこの行を削除した場合

+0

コーディング 'SKPaymentQueue.defaultは()。' 'のviewDidLoad()で(自己)を追加'それはまた、問題を解決しています。この方法は正しいですか? –

+0

いいえ 'SKPaymentQueue.default()。add(self)'は、お支払い方法のアプリ内購入のポップアップを接続するためです...これはあなたに完全な作業を提供するので、あなたのアプリケーションがライブになるときに何か間違いがあります。 –

+0

それは変です。 'SKPaymentQueue.default()。add(self)'という行を削除した場合、アプリの購入でうまくいきます。 –

関連する問題