userDefaults.registerDefaults为Swift 2改变了吗?

时间:2015-09-22 15:17:14

标签: ios nsuserdefaults swift2

以下是我用来保存高分的完整代码:

在游戏场景中:

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?

1 个答案:

答案 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