很难控制代码崩溃,我自己无法复制,但我有几个崩溃报告。它在这条线上崩溃了:
我认为当视图再次打开时,它必须这样做,代表已经是零了,而我认为这不好吗?
import Foundation
import UIKit
import FirebaseDatabase
import StoreKit
class Premium : UITableViewController, SKPaymentTransactionObserver, SKProductsRequestDelegate {
override func viewDidLoad() {
NotificationCenter.default.addObserver(self, selector: #selector(onHasPayed(notification:)), name: .hasPayed, object: nil)
if SKPaymentQueue.canMakePayments() {
print("starting IAPS")
let productIdentifiers = Set([ audioWifi, audioVideo4G, deluxe])
self.request = SKProductsRequest(productIdentifiers: productIdentifiers as Set<String>)
self.request.delegate = self
self.request.start()
} else {
print("please enable IAPS")
}
}
@objc func onHasPayed(notification: NSNotification) {
redirect()
}
private func redirect(){
let appDelegate = UIApplication.shared.delegate! as! AppDelegate
let initialViewController = self.storyboard!.instantiateViewController(withIdentifier: "hh")
appDelegate.window?.rootViewController = initialViewController
appDelegate.window?.makeKeyAndVisible()
}
private var request: SKProductsRequest!
override func viewWillDisappear(_ animated: Bool) {
request.delegate = nil;
request.cancel()
request = nil;
}
}
在哪里需要设置请求委托,在哪里需要取消设置它?因为,我不知道出了什么问题,因为我自己无法模拟。
可能的解决方案:
private var request: SKProductsRequest?
if SKPaymentQueue.canMakePayments() {
print("starting IAPS")
let productIdentifiers = Set([ audioWifi, audioVideo4G, deluxe])
self.request = SKProductsRequest(productIdentifiers: productIdentifiers as Set<String>)
self.request?.delegate = self
self.request?.start()
} else {
print("please enable IAPS")
}
override func viewWillDisappear(_ animated: Bool) {
if let req = request {
req.delegate = nil;
req.cancel()
}
}