此类不是密钥的编码兼容键值

时间:2017-01-22 00:59:01

标签: ios swift sprite-kit

我知道这个问题已被多次询问,但所有情况似乎与我的不同,我没有能力发表评论。

我正在尝试学习如何创建一个UserDefault变量,但它一直在崩溃。我在日志中得到的错误是:

*** Terminating app due to uncaught exception 'NSUnknownKeyException',
    reason: '[<NSUserDefaults 0x1097d6bf8> valueForUndefinedKey:]: this class is 
    not key value coding-compliant for the key AmountOfCoins.'

以下是我的代码中使用UserDefault的所有时间:

    class GameScene: SKScene, SKPhysicsContactDelegate {
    var CoinCount = Int()

^这里我定义了一个变量,以便更容易地访问硬币计数。

    override func didMove(to view: SKView) {
    if let x = UserDefaults.value(forKey: "AmountOfCoins") as? Int{
        CoinCount = x
    }

^这用于检查AmountOfCoins是否为空。我想我可能在这里弄错了。

   func startGame() {
    score = 0
    CoinCount = UserDefaults.value(forKey: "AmountOfCoins") as! Int
    scoreview.text = "\(score)"
    coinview.text = "\(UserDefaults.value(forKey: "AmountOfCoins"))"
}

^这是一个在游戏开始时调用的函数

        func addCoin(){
    run(SKAction.playSoundFileNamed("Coin.wav", waitForCompletion: false))
    CoinCount += 1
    UserDefaults.standard.set(CoinCount, forKey: "AmountOfCoins")
    scoreview.text = "\(UserDefaults.value(forKey: "AmountOfCoins"))"
    coinview.text = "\(CoinCount)"

^最后这里是一个需要添加硬币时调用的函数。

我已经阅读了一些修复此错误的不同方法,但我真的不明白它是如何工作的。

2 个答案:

答案 0 :(得分:8)

正如人们在上面的评论中所说,它应该是这样的

let defaults = UserDefaults.standard
defaults.value(forKey: "AmountOfCoins")

而不是

UserDefaults.value(forKey: "AmountOfCoins")

答案 1 :(得分:0)

你只需要添加 .standard

像 UserDefaults.standard.value

您不必创建 UserDefaults 对象