【发布时间】: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
标签: ios swift sprite-kit