我尝试同步保存的数据但我的游戏仍然没有存储最高分。如果更高的话,我找不到将highScore替换为得分的错误。对不起,我是刚开始学习iOS编程的初学者。
init(size: CGSize, score: NSInteger) {
super.init(size: size)
self.backgroundColor = SKColor.whiteColor()
//To save highest score
var highscore = 0
let userDefaults = NSUserDefaults.standardUserDefaults()
if (score > highscore){
NSUserDefaults.standardUserDefaults().setObject(score, forKey: "highscore")
NSUserDefaults.standardUserDefaults().synchronize()
}
var savedScore: Int = NSUserDefaults.standardUserDefaults().objectForKey("highscore") as! Int
//To get the saved score
var savedScore: Int = NSUserDefaults.standardUserDefaults().objectForKey("highscore") as! Int
答案 0 :(得分:2)
让我们逐步完成您的代码。
首先,你用0覆盖任何高分:
//To save highest score
let highscore = 0
let userDefaults = NSUserDefaults.standardUserDefaults()
NSUserDefaults.standardUserDefaults().setObject(highscore, forKey: "highscore")
NSUserDefaults.standardUserDefaults().synchronize()
然后,您正在检查“highscore”是否为默认值:
if let highscore: AnyObject = userDefaults.valueForKey("highscore") {
一些注意事项:
objectForKey(_:)
,而不是valueForKey(_:)
integerForKey(_:)
而不是objectForKey(_:)
,因为highscore
始终是Int
。: AnyObject
,因为objectForKey(_:)
会返回AnyObject?
然后,我们进入代码:
NSUserDefaults.standardUserDefaults().setObject(score, forKey: "highscore")
NSUserDefaults.standardUserDefaults().synchronize()
您现在正在使用0
覆盖之前添加的score
分数。
最后,即使您在else
条件之前执行此操作,highscore
阻止永远不会被调用,也设置if
。
}
else {
NSUserDefaults.standardUserDefaults().setObject(highscore, forKey: "highscore")
NSUserDefaults.standardUserDefaults().synchronize()
}
从您的代码中不清楚您想要做什么,但您确实在您的问题中这样说:
如果将高分数替换为高分,我找不到什么错误。
嗯,首先,你永远不会检查哪一个更高。
我想你可能会尝试这样做:
let defaults = NSUserDefaults.standardUserDefaults()
let highscore = defaults.integerForKey("highscore")
if score > highscore {
defaults.setInteger(score, forKey: "highscore")
defaults.synchronize()
}