我有2个ViewControllers,在第一个用户获得积分和高分标签。 在第二个ViewController中,代码计算用户是否打破了旧的高分,如果是 - 当然它会改变。但!当我退出应用并再次开始播放时,高分标签显示我的最后得分而不是最高分。 这是我的代码:
First 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()
但在视图控制器的类之外。
另外,我有一个“开关”按钮,以“ON”状态开始。但有时我/用户想要将其更改为关闭,在退出应用并重新启动后,如何将其保存为用户的选择?
答案 0 :(得分:1)
首先检查NSUserDefault
的{{1}}是否已设置。如果未设置,则初始化oldScore
,否则不要。只需获取oldScore的值并将其与新分数进行比较并相应地设置值
oldScore
在第二个视图控制器中,首先将if (NSUserDefaults.standardUserDefaults().objectForKey(oldScore) == nil) {
oldScore = Int()
}
的值放入变量中,然后检查它是否等于NSUserDefault's oldScore
。如果它只是这样设置:
Score
答案 1 :(得分:0)
在第一个视图控制器中进行以下更改。
id fname lname profile_pic
1 barrack obama 1.jpg
5 dummy1 dummy1 5.jpg
6 dummy4 dummy4 6.jpg
根据highScore的变量类型,可能需要进行一些更改。 希望这可能会有所帮助。
答案 2 :(得分:0)
根据Apple的文档,您应该在使用之前注册所有默认值。
在application:didFinishLaunchingWithOptions:
的AppDelegate中添加此代码以注册密钥oldScore
以获得可靠的默认值。还为所提到的“切换”按钮注册了密钥switchState
。
let defaults = NSUserDefaults.standardUserDefaults()
let defaultValues = ["oldScore" : 0, "switchState" : "ON"]
defaults.registerDefaults(defaultValues)
在第一个视图控制器中检索高分值。如果没有将值写入磁盘,则会获取已注册的默认值(0)。您可以分别读取“切换”按钮的值。
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
}