swift - 视图更改或应用程序关闭后号码会不断重置
问题描述
我正在尝试实现一个分数,在用户观看奖励视频广告后,分数将增加 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)
}
谢谢您的帮助。
解决方案
score
仅当其声明的对象保留在内存中时,才会跟踪诸如 的状态。创建对象时,它会为其属性分配内存,当不再需要该对象时,将释放内存并丢失所有状态。在您的示例中,当应用程序关闭或视图不再显示在屏幕上时,对象被释放并释放内存,score
不再存在。
为了跟踪score
商店,例如在NSUserDefaults
p3t3r 中提到的。
推荐阅读
- shell - 远程命令的 ssh 结果
- c# - 防止数据网格在 C# 中加载实体框架导航属性
- kubernetes - 如何为任何 k8s 对象创建样板
- angular - 我可以使用 angular 7 的 gsap 或anime.js 吗?如果可以,那么如何?
- rspec - 使用令牌和 SimpleTokenAuthentication 测试登录用户失败,因为 SimpleTokenAuthentication 未登录用户
- python - Passing method name as function argument
- django - Django 2 将自定义按钮添加到管理员
- javascript - 使用脚本添加类
- mysql - SQL附加其他表的行
- sql - VBA SQL 聚合备注字段