2017-05-13 14 views
2

Ich benutze diesen Code meine in-App-Kauf zu erstellen:App stürzt mit In-App-Kauf Fehler

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

Aber wenn ich auf die Schaltfläche klicken (unlockAction) zweimal oder einmal klicken, bewegen auf verschiedene Controller, Rückkehr und klicken sie einmal mehr meinen App stürzt auf dieser Linie:

SKPaymentQueue.default().add(payment); 

mit Fehler (lldb)

Wie es zu beheben?

Antwort

1

Sie müssen dafür die Funktion viewWillDissappear() in Ihrem Abrechnungscontroller verwenden. Probieren Sie das aus.

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

Ich bekam auch dieses Problem und das hat mein Problem gelöst.

Der Fehler war mit SKPaymentQueue.default().add(payment) Zeile im Code. Probieren Sie diese Lösung aus und seien Sie ein zuverlässiger produktiver Programmierer. Glückliche

+0

Codierung, wenn ich diese Zeile löschen 'SKPaymentQueue.default(). Add (Selbst-)' in 'viewDidLoad()' es ist auch Problem lösen. Ist dieser Weg richtig? –

+0

Nein, weil 'SKPaymentQueue.default(). Add (self)' es verbinden Sie Ihre Zahlungsmethode in-App-Purchase Pop-up ... Bedeutet, dass dies die gesamte Arbeit für Sie bereitstellen, so dass es während Ihrer Ladung erforderlich ist, so dass Sie nicht Wenn Ihre Bewerbung online geht, erhalten Sie einen Fehler. –

+0

Es ist seltsam. Wenn ich die Zeile 'SKPaymentQueue.default() lösche. Add (self)' meine App in App funktioniert gut. –