Iphone 为什么';游戏关闭并再次启动后,我的最佳得分值是否加载?

Iphone 为什么';游戏关闭并再次启动后,我的最佳得分值是否加载?,iphone,swift,sprite-kit,Iphone,Swift,Sprite Kit,如果游戏继续运行,我的最佳分数值工作得很好,但是如果游戏关闭并再次启动,它将不会加载最佳分数。每当它再次发射时,它就会回到零 以下是我正在做的: import SpriteKit class EM: SKScene, SKPhysicsContactDelegate { var bestScoreText = SKSpriteNode() let bestScoreCategory: UInt32 = 1 << 4 var bestScoreLabelNode = SKLab

如果游戏继续运行,我的最佳分数值工作得很好,但是如果游戏关闭并再次启动,它将不会加载最佳分数。每当它再次发射时,它就会回到零

以下是我正在做的:

import SpriteKit

class EM: SKScene, SKPhysicsContactDelegate {

var bestScoreText = SKSpriteNode()

let bestScoreCategory: UInt32 = 1 << 4

var bestScoreLabelNode = SKLabelNode()
var bestScore = NSInteger()

override func didMoveToView(view: SKView) {
    /* Setup your scene here */

    var bestScore = 0

    var bestScoreDefault = NSUserDefaults.standardUserDefaults()

    bestScore = NSUserDefaults.standardUserDefaults().integerForKey("bestScore")

  }



func didBeginContact(contact: SKPhysicsContact) {


    if (score > bestScore) {

        bestScore = score

        let defaults = NSUserDefaults.standardUserDefaults()
        defaults.setInteger(bestScore, forKey: "bestScore")
        defaults.synchronize()

    }

    } else {
......
}

}首先,不要使用可选值,分数应该永远不会为零

处理
用户默认值的常用方法是注册键值对,使其具有可靠的默认值


因此,在AppDelegate中—尽快—编写

let defaults = NSUserDefaults.standardUserDefaults()
let defaultValues = ["bestScore" : 0]
defaults.registerDefaults(defaultValues)
在每次应用程序启动时调用此代码并不重要。 如果
用户默认值
数据库中存在任何键,则忽略默认值


将变量
bestScore
声明为非可选
Int
,起始值为0。
由于
Int
是默认类型,因此可以省略该类型

var bestScore = 0

要从
用户默认值中读取高分,请使用

bestScore = NSUserDefaults.standardUserDefaults().integerForKey("bestScore")
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setInteger(bestScore, forKey: "bestScore")
defaults.synchronize()
不需要检查
nil
,因为我们知道默认的非可选值为0


要将高分写入
用户默认值
使用

bestScore = NSUserDefaults.standardUserDefaults().integerForKey("bestScore")
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setInteger(bestScore, forKey: "bestScore")
defaults.synchronize()

好啊这很有帮助。应用程序委托中的“默认值”出现声明错误。我已经更新了我的应用程序代理的外观。我想我搞砸了。代码必须放在一个方法中。把它放在
didsfinishlaunchingwithoptions
或更好,实现
awakeFromNib
我按照你说的做了所有事情,但仍然不起作用。我已经用你所说的更新了我的代码。所以,当我从var最佳分数中去掉可变部分时,它起作用了。