Ios 应用内购买后更新UITableView
我在我的Ios 应用内购买后更新UITableView,ios,swift,uitableview,Ios,Swift,Uitableview,我在我的SKPaymentTransactionObserver中有以下代码,我已经确认在我完成沙箱购买时,它运行.purchased案例 func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { switch transa
SKPaymentTransactionObserver
中有以下代码,我已经确认在我完成沙箱购买时,它运行.purchased
案例
func paymentQueue(_ queue: SKPaymentQueue,
updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .purchasing, .deferred: break
case .purchased, .restored:
Settings.didPurchase = true
DispatchQueue.main.async {
tableView.reloadData()
}
SKPaymentQueue.default().finishTransaction(transaction)
case .failed: // other code here
}
}
}
myUITableView的数据源包括以下功能:
func numberOfSections(in tableView: UITableView) -> Int {
return Settings.didPurchase ? 3 : 4
}
调试时,我确认在调用tableView.reloadData()
之后调用了此函数,并且在购买后返回3
。但是,视图不会更新以包含额外的部分。只有当我关闭整个视图并在完成购买后重新加载它时,它才会更新,在这种情况下,它会触发另一个表视图重新加载,看起来就像应该的那样
我的理论是,因为当我调用reloadData()
时,UITableView
不是顶级视图(它被苹果的一条警告覆盖,说购买成功),它不会更新视图,认为它不可见。但是,这合理吗?不管怎样,我如何修复代码,以便在用户完成购买时视图按预期更新?是否调试了调用的重新加载tableview方法?同一ViewController中有多少个tableview?是的,我确认调用了重新加载数据。我在ViewController中只有一个TableView。