我知道这个问题已经问过很多次了,但是所有情况似乎都与我不同,我没有能力发表评论。
我正在尝试学习如何制作UserDefault变量,但是它一直崩溃。我在日志中得到的错误是:
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[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)"
^最后,这是一个需要添加硬币时调用的函数。
我已经阅读了几种解决此错误的方法,但我真的不明白它的工作原理。
正如人们在上面的评论中所说,应该是这样的
let defaults = UserDefaults.standard defaults.value(forKey: "AmountOfCoins")
代替
UserDefaults.value(forKey: "AmountOfCoins")