首页 > 解决方案 > 视图更改或应用程序关闭后号码会不断重置

问题描述

我正在尝试实现一个分数,在用户观看奖励视频广告后,分数将增加 1。我的代码将分数增加 1,但在我更改视图并返回显示分数的视图后,分数返回 0。如何更新分数?

import UIKit
import GoogleMobileAds
class RewardedAdViewController: UIViewController, 
    GADRewardBasedVideoAdDelegate {

@IBOutlet weak var scoreText: UILabel!

var score = 0
override func viewDidLoad() {
    super.viewDidLoad()
    GADRewardBasedVideoAd.sharedInstance().load(GADRequest(), withAdUnitID: "ca-app-pub-3940256099942544/1712485313")
    GADRewardBasedVideoAd.sharedInstance().delegate = self

    //let defaults = UserDefaults.standard
    //defaults.set(0, forKey: "score")

}



@IBAction func playVideo(_ sender: Any) {
    if GADRewardBasedVideoAd.sharedInstance().isReady == true{
        GADRewardBasedVideoAd.sharedInstance().present(fromRootViewController: self )
    }
}

func rewardBasedVideoAdDidClose(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {

    GADRewardBasedVideoAd.sharedInstance().load(GADRequest(), withAdUnitID: "ca-app-pub-3940256099942544/1712485313")
    GADRewardBasedVideoAd.sharedInstance().delegate = self

}

func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd, didRewardUserWith reward: GADAdReward) {

    score = score + 1
    scoreText.text = String(score)
}

在上面的代码中,我先声明var score = 0,然后在代码中声明,当用户看完广告后,分数增加 1

func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd, didRewardUserWith reward: GADAdReward) {

    score = score + 1
    scoreText.text = String(score)
}

谢谢您的帮助。

标签: swift

解决方案


score仅当其声明的对象保留在内存中时,才会跟踪诸如 的状态。创建对象时,它会为其属性分配内存,当不再需要该对象时,将释放内存并丢失所有状态。在您的示例中,当应用程序关闭或视图不再显示在屏幕上时,对象被释放并释放内存,score不再存在。

为了跟踪score商店,例如在NSUserDefaultsp3t3r 中提到的。


推荐阅读