Ios 应用程序崩溃,出现应用内购买错误
我使用此代码创建我的应用内购买:Ios 应用程序崩溃,出现应用内购买错误,ios,swift,Ios,Swift,我使用此代码创建我的应用内购买: import UIKit import StoreKit class ViewController: UIViewController, SKProductsRequestDelegate, SKPaymentTransactionObserver, SKStoreProductViewControllerDelegate { var product_id: String? @IBOutlet weak var buyButton: UIButton! o
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")
}
}
错误(lldb)
如何修复它?您必须在您的计费控制器中使用
viewwilldissequence()
函数。试试那个
override func viewWillDisappear(_ animated: Bool) {
SKPaymentQueue.default().remove(self)
}
我也遇到了这个问题,这也解决了我的问题
错误出现在代码中的SKPaymentQueue.default().add(payment)
行。所以,试试这个解决方案,做一个可靠、高效的程序员。
快乐编码
如果我在
viewDidLoad()
中删除这一行SKPaymentQueue.default().add(self)
,也可以解决问题。这种方式正确吗?不正确,因为SKPaymentQueue.default().add(self)
它在应用程序购买弹出窗口中连接您的付款方式。。。这意味着这将为您提供完整的工作,因此在加载时这是必要的,这样您在应用程序启动时就不会出错。这很奇怪。如果我删除行SKPaymentQueue.default().add(self)
我的应用内购买工作正常。我保存此行SKPaymentQueue.default().add(付款)
在func-buydroduct(product:SKProduct)
中。然后就可以继续了
override func viewWillDisappear(_ animated: Bool) {
SKPaymentQueue.default().remove(self)
}