以下是我用来保存高分的完整代码:
在游戏场景中:
func atGameOver() {
var defaults = NSUserDefaults()
var highscore = defaults.integerForKey("highscore")
if (score > highscore){
defaults.setInteger(score, forKey: "highscore") }
var showHighScore = defaults.integerForKey("highscore")
let userDefaults = NSUserDefaults.standardUserDefaults()
var totalScore = userDefaults.integerForKey("totalScoreKey")
totalScore += self.score
userDefaults.setInteger(totalScore, forKey: "totalScoreKey")
}
在app delegate中:
var totalScoreKey: Int = 0
override init() {
let userDefaults = NSUserDefaults.standardUserDefaults()
let defaultValues = [totalScoreKey: 0]
userDefaults.registerDefaults(defaultValues) }
自从使用Swift 2和xCode 7后,我收到了这个错误:
"无法将类型' [Int:Int]'的值转换为预期的参数类型' [String:AnyObject]'"
它位于userDefaults.registerDefaults(defaultValues)
行。它适用于Swift 1.2"非法"是否发布了应用程序,如何更改Swift 2?
答案 0 :(得分:0)
问题是totalScoreKey
是一个Int。那是违法的。 (如果你在Swift 1.2中这样做,这不是理由;这仍然是错误的,现在发生的事情是你已经被抓住了。)
NSUserDefaults的密钥必须是字符串。重写这一行:
var totalScoreKey: Int = 0
这样:
var totalScoreKey: String = "totalScoreKey"
这样,密钥将匹配您在此处使用的密钥:
var totalScore = userDefaults.integerForKey("totalScoreKey")
您尝试传递的零(0
)需要是值,而不是键;你已经过去了:
let defaultValues = [totalScoreKey: 0]
^ -- this is the zero value