更新UI时如何同时执行2个功能

时间:2019-03-22 13:45:44

标签: ios swift multithreading in-app-purchase

我正在实施In App purchases,效果很好。我正在实现Auto-RenewableNon-renewable订阅。我可以确定任一订阅何时处于活动状态以及何时过期。我可以根据订阅状态更新用户个人资料用户界面,但只能在我一次选中一个时进行。

如果视图即将出现时我同时调用functions。用户界面混乱,无法显示正确的状态。我进行了调试,发现如果第一个检查一个订阅,更新其状态,当我移出view并返回时,它检查另一个订阅会返回默认状态standard account,因为{ {1}}已过期。有没有一种方法我可以同时运行两个功能,也可以同时使用它们来更新我的UI。下面是我的代码。

Auto-renewable

1 个答案:

答案 0 :(得分:1)

您需要使用DispatchGroup并在其中的通知部分中完成所需的操作

let dispatchGroup = DispatchGroup()
var inpIsActive = false
var inpSubscribed = false

func checkForAutoRenewableSubscription() {
    dispatchGroup.enter()
    self.activityIndicator.startAnimating()
    self.user.checkIfSubscriptionIsActive { (pIsActive) in
        self.inpIsActive = pIsActive   
        self.dispatchGroup.leave()
    }
}

func checkForNonRenewableSubscription() {
    dispatchGroup.enter()
    self.activityIndicator.startAnimating()
    self.user.checkifNonRenewableSubscriptionIsActive { (pSubscribed) in
        self.inpSubscribed = pSubscribed  
        self.dispatchGroup.leave()
    }
}

viewDidLoad

checkForAutoRenewableSubscription()
checkForNonRenewableSubscription() 
dispatchGroup.notify(queue: .main) { 
   self.setUpUserAccountStatus()
}