首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在非视图控制器类中添加活动指示符

在非视图控制器类中添加活动指示符
EN

Stack Overflow用户
提问于 2019-08-26 17:14:34
回答 2查看 76关注 0票数 1

我有下面的程序内购买代码。由于purchase()一执行就有延迟,所以我需要说明应用程序正在加载。-在调用函数purchase() 时,如何添加活动指示符?

我已经尝试向给定函数的当前视图控制器中添加一个带有指示符的子视图,但失败了。

代码语言:javascript
复制
class IAPService: NSObject {

    ...

    func purchase() {
        guard let productToPurchase = products.first else { return }
        print(productToPurchase)
        let payment = SKPayment(product: productToPurchase)
        paymentQueue.add(payment)
    }

    func restorePurchases() {
        paymentQueue.restoreCompletedTransactions()
    }

}

extension IAPService: SKProductsRequestDelegate {

    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        self.products = response.products
        for product in response.products {
            print(product.localizedTitle)
        }
    }

}

extension IAPService: SKPaymentTransactionObserver {

    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            print(transaction.transactionState.status(), transaction.payment.productIdentifier)
            if transaction.payment.productIdentifier == "com.timfuhrmann.savum.premium" && ( transaction.transactionState == .purchased || transaction.transactionState == .restored ) {
                premiumPurchased = true
                defaults.set(premiumPurchased, forKey: "premiumPurchased")
                print(premiumPurchased)
            }
            switch transaction.transactionState {
            case .purchasing: break
            case .purchased: goToAddCar(); queue.finishTransaction(transaction)
            default: queue.finishTransaction(transaction)
            }
        }
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-26 17:31:29

作为一个类,IAPService不应该关心,甚至不知道用户界面。活动指示器应完全由视图控制器发起和控制。

我将使用NotificationCenter观察者来让视图控制器知道事务何时完成(或出错),以便VC知道何时禁用活动指示符并更新UI的其余部分。

票数 3
EN

Stack Overflow用户

发布于 2019-08-26 17:58:56

您可以在调用该函数之前在ViewController中显示一个活动指示符,并在该函数中包含一个完成处理程序,当购买完成时,您可以在该函数中取消ViewController中的活动指示符。

您应该在ViewController中添加活动指示符,而不是来自您支付模块中的函数,因为支付模块只负责支付和处理支付。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57662209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档