我尝试使用 UserDefaults 每次打开时都不会将分数重置为零,但它不起作用
I tried using UserDefaults for a score not to reset to zero every time it opens but it doesn't work
我正在尝试在我的游戏中创建应用内货币系统。为此,我尝试使用 UserDefaults,以便每次关闭应用程序并重新打开或切换到不同的 viewController 并切换回来时,所述货币不会重置为零。但是,它似乎不起作用。有人可以告诉我我做错了什么吗?
这是我的代码:
var notesScore = 0
@IBAction func IncreaseNotes(_ sender: UIButton)
{
notesScore = notesScore + 1
notesLabel.text = String(notesScore)
}
override func viewDidLoad()
{
super.viewDidLoad()
view.backgroundColor = colors.themeBlue
notesLabel.textColor = colors.white
var notesScoreDefault = UserDefaults.standard
if (notesScoreDefault.value(forKey: "notesScore") != nil)
{
notesScore = notesScoreDefault.value(forKey: "notesScore") as! NSInteger
notesLabel.text = NSString(format: "Notes: %i", notesScore) as String
}
你应该在更改时存储分数。例如,当你增加分数时,你可以将其存储到 userdefaults
.
@IBAction func IncreaseNotes(_ sender: UIButton) {
notesScore = notesScore + 1
notesLabel.text = String(notesScore)
// Saving score.
UserDefaults.standard.set(self.notesScore, forKey: "notesScore")
}
现在 viewDidLoad
,您可以按如下方式检索该分数,
let score = UserDefaults.standard.integer(forKey: "notesScore")
notesLabel.text = String(score)
所以我通常建议你写一个 UserdefaultsHelper.swift class 来存储你所有的用户默认值并且可以跟踪。
它应该看起来像这样:
import UIKit
import Foundation
class UserDefaultsHelper {
static var notesScore: Int? {
get {
return UserDefaults.standard.object(forKey: "notesScore") as? Int
}
set {
UserDefaults.standard.set(newValue, forKey: "notesScore")
}
}
}
之后,您可以在应用程序的任何位置通过调用访问该值:
UserDefaultsHelper.notesScore
这是一个可选的,所以下次你需要它时甚至不确定它是否存在你可以调用 viewDidLoad for exmaple:
override func viewDidLoad() {
super.viewDidLoad()
if let notesScore = UserDefaultsHelper.notesScore {
// Do what you want with it here
}
}
然后添加一些东西或者做你想做的。例如,我像这样存储 userIDs 或 pushTokens。对于未来的 Userdefaults,您可以将其添加到 UserdefaultsHelper.swift
Edit: Example
关于评论中的问题。如果你想增加 5。你可以这样做:
if let existingNotesScore = UserDefaultsHelper.notesScore {
UserDefaultsHelper.notesScore = existingNotesScore + 5
}
说明:使用 "if let" 您可以安全地检查变量 notesScore 中的 Userdefaults 中是否保存了某些内容,如果是,它会进入 {} 并且您可以访问 existingNotesScore 中的值。然后你只需用现有的 1 + 5
覆盖 Userdefaults 中的值
我正在尝试在我的游戏中创建应用内货币系统。为此,我尝试使用 UserDefaults,以便每次关闭应用程序并重新打开或切换到不同的 viewController 并切换回来时,所述货币不会重置为零。但是,它似乎不起作用。有人可以告诉我我做错了什么吗?
这是我的代码:
var notesScore = 0
@IBAction func IncreaseNotes(_ sender: UIButton)
{
notesScore = notesScore + 1
notesLabel.text = String(notesScore)
}
override func viewDidLoad()
{
super.viewDidLoad()
view.backgroundColor = colors.themeBlue
notesLabel.textColor = colors.white
var notesScoreDefault = UserDefaults.standard
if (notesScoreDefault.value(forKey: "notesScore") != nil)
{
notesScore = notesScoreDefault.value(forKey: "notesScore") as! NSInteger
notesLabel.text = NSString(format: "Notes: %i", notesScore) as String
}
你应该在更改时存储分数。例如,当你增加分数时,你可以将其存储到 userdefaults
.
@IBAction func IncreaseNotes(_ sender: UIButton) {
notesScore = notesScore + 1
notesLabel.text = String(notesScore)
// Saving score.
UserDefaults.standard.set(self.notesScore, forKey: "notesScore")
}
现在 viewDidLoad
,您可以按如下方式检索该分数,
let score = UserDefaults.standard.integer(forKey: "notesScore")
notesLabel.text = String(score)
所以我通常建议你写一个 UserdefaultsHelper.swift class 来存储你所有的用户默认值并且可以跟踪。
它应该看起来像这样:
import UIKit
import Foundation
class UserDefaultsHelper {
static var notesScore: Int? {
get {
return UserDefaults.standard.object(forKey: "notesScore") as? Int
}
set {
UserDefaults.standard.set(newValue, forKey: "notesScore")
}
}
}
之后,您可以在应用程序的任何位置通过调用访问该值:
UserDefaultsHelper.notesScore
这是一个可选的,所以下次你需要它时甚至不确定它是否存在你可以调用 viewDidLoad for exmaple:
override func viewDidLoad() {
super.viewDidLoad()
if let notesScore = UserDefaultsHelper.notesScore {
// Do what you want with it here
}
}
然后添加一些东西或者做你想做的。例如,我像这样存储 userIDs 或 pushTokens。对于未来的 Userdefaults,您可以将其添加到 UserdefaultsHelper.swift
Edit: Example
关于评论中的问题。如果你想增加 5。你可以这样做:
if let existingNotesScore = UserDefaultsHelper.notesScore {
UserDefaultsHelper.notesScore = existingNotesScore + 5
}
说明:使用 "if let" 您可以安全地检查变量 notesScore 中的 Userdefaults 中是否保存了某些内容,如果是,它会进入 {} 并且您可以访问 existingNotesScore 中的值。然后你只需用现有的 1 + 5
覆盖 Userdefaults 中的值