记得在swift中2个ViewControllers的高分
Remember the high score in 2 ViewControllers in swift
我得到了 2 ViewController 秒,在第一个中,用户获得了分数和高分标签。
在第二个 ViewController 中,代码计算用户是否打破了旧的高分,如果是 - 它当然会改变。但!当我退出应用程序并重新开始游戏时,高分标签显示我的 最后得分 而不是最高得分。
这是我的代码:
第一个ViewController:
let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
defaults.synchronize()
highScore.text = String(stringInterpolationSegment: oldScore)
第二个ViewController:
let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
if score > oldScore {
defaults.setInteger(score, forKey: "oldScore")
defaults.synchronize()
var money = defaults.valueForKey("oldScore") as! Int
oldScore = money
} else {
defaults.setInteger(oldScore, forKey: "oldScore")
defaults.synchronize()
var money = defaults.valueForKey("oldScore") as! Int
oldScore = money
}
我在视图控制器代码中也得到了 var oldScore = Int()
,但在视图控制器的 class 之外。
此外,我还有一个 "Switch" 按钮,其状态为 "ON"。但是有时候me/the用户想把它改成关闭,退出应用重启后如何保存为用户选择?
在您的第一个视图控制器中进行以下更改。
let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
if defaults.integerForKey("oldScore") != nil
{
highScore.text = defaults.integerForKey("oldScore")
}
else
{
highScore.text = 0
}
根据 highScore 的变量类型,可能需要进行一些更改。
希望这可能会有所帮助。
首先检查是否设置了 NSUserDefault
for oldScore
。如果未设置,则只初始化 oldScore
,否则不初始化。只需获取 oldScore 的值并将其与新分数进行比较并相应地设置值
if (NSUserDefaults.standardUserDefaults().objectForKey(oldScore) == nil) {
oldScore = Int()
}
在你的 Second View Controller 中,首先将 NSUserDefault's oldScore
的值放入一个变量中,然后检查它是否等于你的 Score
。如果只是这样设置它:
let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
var oldScoreCheck = defaults.valueForKey("oldScore") as! Int
if score > oldScoreCheck {
defaults.setInteger(score, forKey: "oldScore")
defaults.synchronize()
}
根据 Apple 的文档,您应该在使用它们之前注册所有默认值。
在 application:didFinishLaunchingWithOptions:
的 AppDelegate 中添加此代码以注册密钥 oldScore
以获得可靠的默认值。还为提到的 "Switch" 按钮注册了密钥 switchState
。
let defaults = NSUserDefaults.standardUserDefaults()
let defaultValues = ["oldScore" : 0, "switchState" : "ON"]
defaults.registerDefaults(defaultValues)
在第一个视图控制器中检索高分值。如果没有值被写入磁盘,则采用注册的默认值 (0)。您可以分别读取 "Switch" 按钮的值。
let defaults = NSUserDefaults.standardUserDefaults()
let oldScore = defaults.integerForKey("oldScore")
let buttonState = defaults.stringForKey("switchState")
highScore.text = "\(oldScore)"
如果改变了,在第二个视图控制器中保存高分
let defaults = NSUserDefaults.standardUserDefaults()
let oldScore = defaults.integerForKey("oldScore")
if score > oldScore {
defaults.setInteger(score, forKey: "oldScore")
defaults.synchronize()
oldScore = score
}
我得到了 2 ViewController 秒,在第一个中,用户获得了分数和高分标签。 在第二个 ViewController 中,代码计算用户是否打破了旧的高分,如果是 - 它当然会改变。但!当我退出应用程序并重新开始游戏时,高分标签显示我的 最后得分 而不是最高得分。 这是我的代码:
第一个ViewController:
let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
defaults.synchronize()
highScore.text = String(stringInterpolationSegment: oldScore)
第二个ViewController:
let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
if score > oldScore {
defaults.setInteger(score, forKey: "oldScore")
defaults.synchronize()
var money = defaults.valueForKey("oldScore") as! Int
oldScore = money
} else {
defaults.setInteger(oldScore, forKey: "oldScore")
defaults.synchronize()
var money = defaults.valueForKey("oldScore") as! Int
oldScore = money
}
我在视图控制器代码中也得到了 var oldScore = Int()
,但在视图控制器的 class 之外。
此外,我还有一个 "Switch" 按钮,其状态为 "ON"。但是有时候me/the用户想把它改成关闭,退出应用重启后如何保存为用户选择?
在您的第一个视图控制器中进行以下更改。
let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
if defaults.integerForKey("oldScore") != nil
{
highScore.text = defaults.integerForKey("oldScore")
}
else
{
highScore.text = 0
}
根据 highScore 的变量类型,可能需要进行一些更改。 希望这可能会有所帮助。
首先检查是否设置了 NSUserDefault
for oldScore
。如果未设置,则只初始化 oldScore
,否则不初始化。只需获取 oldScore 的值并将其与新分数进行比较并相应地设置值
if (NSUserDefaults.standardUserDefaults().objectForKey(oldScore) == nil) {
oldScore = Int()
}
在你的 Second View Controller 中,首先将 NSUserDefault's oldScore
的值放入一个变量中,然后检查它是否等于你的 Score
。如果只是这样设置它:
let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
var oldScoreCheck = defaults.valueForKey("oldScore") as! Int
if score > oldScoreCheck {
defaults.setInteger(score, forKey: "oldScore")
defaults.synchronize()
}
根据 Apple 的文档,您应该在使用它们之前注册所有默认值。
在
application:didFinishLaunchingWithOptions:
的 AppDelegate 中添加此代码以注册密钥oldScore
以获得可靠的默认值。还为提到的 "Switch" 按钮注册了密钥switchState
。let defaults = NSUserDefaults.standardUserDefaults() let defaultValues = ["oldScore" : 0, "switchState" : "ON"] defaults.registerDefaults(defaultValues)
在第一个视图控制器中检索高分值。如果没有值被写入磁盘,则采用注册的默认值 (0)。您可以分别读取 "Switch" 按钮的值。
let defaults = NSUserDefaults.standardUserDefaults() let oldScore = defaults.integerForKey("oldScore") let buttonState = defaults.stringForKey("switchState") highScore.text = "\(oldScore)"
如果改变了,在第二个视图控制器中保存高分
let defaults = NSUserDefaults.standardUserDefaults() let oldScore = defaults.integerForKey("oldScore") if score > oldScore { defaults.setInteger(score, forKey: "oldScore") defaults.synchronize() oldScore = score }