//帮助请使用此代码无法正常工作,将此作为Xcode的反馈。 致命错误:在解包可选值时意外发现nil
var savedScore = NSUserDefaults.standardUserDefaults().objectForKey("HighestScore") as! Int
import SpriteKit
class GameScene: SKScene {
var highestScore:Int = 2
var score = Int()
override func didMoveToView(view: SKView) {
/* Setup your scene here */
//To save highest score
//To get the saved score
var savedScore = NSUserDefaults.standardUserDefaults().objectForKey("HighestScore") as! Int
print(savedScore)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
score += 1
print("Score - \(score)")
if score > highestScore
{
highestScore = score
NSUserDefaults.standardUserDefaults().setObject(highestScore, forKey:"HighestScore")
NSUserDefaults.standardUserDefaults().synchronize()
print("Beat")
}
else {
print("Not Beat")
}
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
}
}
答案 0 :(得分:1)
您在保存之前调用userDefaults函数。您需要检查它是否存在。首先,您可以让自己更轻松,只需将其保存为整数即可。然后你需要检查是否有值。
NSUserDefaults.standardUserDefaults().setInteger(highestScore, forKey: "HighestScore")
//IntegerForKey will never return nil. This will return 0 if there is no value.
let savedScore = NSUserDefaults.standardUserDefaults().integerForKey("HighestScore")
print(savedScore)
答案 1 :(得分:0)
likeBtn.setLongClickable(true);
likeBtn.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return true;
}
});
是一个字典对象。如果您尝试读取之前未设置值的值,则会得到NSUserDefaults.standardUserDefaults
。您可以检查密钥的值是否存在
nil
如果let savedScore = NSUserDefaults.standardUserDefaults.integerForKey("HighestScore") ?? 0
的值存在,您将获得正确的值,否则,您会将HighestScore
设置为0
的默认值。
答案 2 :(得分:0)
谢谢你们,我昨天得到了它,但是没有时间来到这里并发布它但这里的代码是有效的。再次感谢你们帮助了!
class GameScene: SKScene {
var score = Int()
var highScore = Int()
override func didMoveToView(view: SKView) {
/* Setup your scene here */
//IntegerForKey will never return nil. This will return 0 if there is no value.
highScore = NSUserDefaults.standardUserDefaults().integerForKey("HighestScore")
print("highScore - \(highScore)")
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
score += 1
print("Score - \(score)")
if score > highScore
{
highScore = score
NSUserDefaults.standardUserDefaults().setObject(highScore, forKey:"HighestScore")
NSUserDefaults.standardUserDefaults().synchronize()
print("Beat")
}
else {
print("Not Beat")
}
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
}
}