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

Posted

技术标签:

【中文标题】此类不是键的键值编码兼容的键【英文标题】:This class is not a key value coding-compliant for the key 【发布时间】:2017-01-22 00:59:01 【问题描述】:

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

我正在尝试学习如何创建 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)"

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

我已经阅读了几种不同的方法来修复这个错误,但我真的不明白它是如何工作的。

【问题讨论】:

使用integer(forKey:) 而不是value(forKey:) 来检索值。 应该是UserDefaults.standard,它有一个名为integer(forKey:)的方法,它不返回可选 @JAL 当我使用 UserDefaults.interger 时,它要求我添加 (UserDefaults) 而不是 (forKey: ) 加载它coinCount = UserDefaults.standard.integer(forKey: "AmountOfCoins") 顺便说一句,Swift 约定以小写字母开头命名您的变量。将CoinCount 更改为coinCount 【参考方案1】:

上面的cmets里有人说过,应该是这样的

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

而不是

UserDefaults.value(forKey: "AmountOfCoins")

【讨论】:

它是 UserDefault.standard.Integer(forKey: )。感谢您尝试【参考方案2】:

您只需添加 .standard

类似于 UserDefaults.standard.value

您不一定要创建 UserDefaults 对象

【讨论】:

以上是关于此类不是键的键值编码兼容的键的主要内容,如果未能解决你的问题,请参考以下文章

MPMediaItem 此类与键的键值编码不兼容

iOS/Facebook 登录错误:此类与键的键值编码不兼容

编辑核心数据会产生错误,此类与键的键值编码不兼容

使用 Restkit 0.20 映射此类与键的键值编码不兼容

接口构建器问题:连接 IBOutlet 时,获取“此类与键的键值编码不兼容”

将项目从情节提要更改为 xib 文件时出现“此类与键的键值编码不兼容”错误