Как перезагрузить ViewController из другого класса?
Я хочу перезагрузить свой ViewController после успешной покупки. Но как это сделать из класса покупки. Как перезагрузить ViewController из другого класса?
class IAPObserver: NSObject, SKPaymentTransactionObserver {
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .purchasing:
break
case .purchased:
delegate?.purchaseStatusDidUpdate(PurchaseStatus.init(state: .complete, error: nil, transaction: transaction, message:"Purchase Complete."))
SKPaymentQueue.default().finishTransaction(transaction)
// code to reload my ViewController
case .failed:
delegate?.purchaseStatusDidUpdate(PurchaseStatus.init(state: .failed, error: transaction.error, transaction: transaction, message:"An error occured."))
SKPaymentQueue.default().finishTransaction(transaction)
case .restored:
delegate?.restoreStatusDidUpdate(PurchaseStatus.init(state: .complete, error: nil, transaction: transaction, message:"Restore Success!"))
SKPaymentQueue.default().finishTransaction(transaction)
case .deferred:
break
}
}
}
Ответы (1 шт):
Автор решения: Denis Shchigolev
→ Ссылка
Как один из вариантов через NotificationCentr отправить уведомления, а во ViewController подписаться на них:
отправляем:
NotificationCenter.default.post(name: NSNotification.Name("Complite"), object: nil)
подписываемся:
NotificationCenter.default.addObserver(self, selector: #selector(updateView), name: NSNotification.Name(rawValue: "Сomplite"), object: nil)
а так же добавляем новый метод для селектора, как раз в котором и обновим все визуальные элементы viewController:
@objc private func updateView() {
//тут обновляем все визуальные элементы
print("Payment complite, view is update")
}
в deinit() viewController не забываем отписаться от уведомлений:
deinit(){
NotificationCenter.default.removeObserver(self)
}