Ios 使用默认值保存游戏中的分数
我制作了一个名为“多少个手指”的小应用程序,用户必须猜测电脑背后有多少个手指。现在我希望它能够用NSUserdefaults保存用户分数,但它不起作用。下面是我的代码现在的样子:Ios 使用默认值保存游戏中的分数,ios,swift,nsuserdefaults,Ios,Swift,Nsuserdefaults,我制作了一个名为“多少个手指”的小应用程序,用户必须猜测电脑背后有多少个手指。现在我希望它能够用NSUserdefaults保存用户分数,但它不起作用。下面是我的代码现在的样子: // // ViewController.swift // How many Fingers? // // Created by Kevin Nguyen on 02.05.15. // Copyright (c) 2015 Kevin Nguyen. All rights reserved. // impo
//
// ViewController.swift
// How many Fingers?
//
// Created by Kevin Nguyen on 02.05.15.
// Copyright (c) 2015 Kevin Nguyen. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet var userGuess: UITextField!
@IBOutlet var userScore: UILabel!
@IBOutlet var userTotal: UILabel!
@IBOutlet var result: UILabel!
var score:Int = 0
var totalGames:Int = 0
@IBAction func resetScore(sender: AnyObject) {
score = 0
userScore.text = "0"
}
@IBAction func start(sender: AnyObject) {
var userGuessInt = userGuess.text.toInt()
var fingers = Int(arc4random_uniform(6))
if userGuessInt <= 5 {
if userGuessInt == fingers {
result.text = "Great! You were right!"
score++
totalGames++
userScore.text = "\(score)"
userTotal.text = "\(totalGames)"
println("User score is \(score); total games is \(totalGames)")
NSUserDefaults.standardUserDefaults().setObject(score, forKey: "svScore")
NSUserDefaults.standardUserDefaults().setObject(totalGames, forKey: "svTotalGames")
} else {
result.text = "Try Again!"
println("User score is \(score); total games is \(totalGames)")
totalGames++
userTotal.text = "\(totalGames)"
NSUserDefaults.standardUserDefaults().setObject(score, forKey: "svScore")
NSUserDefaults.standardUserDefaults().setObject(totalGames, forKey: "svTotalGames")
}
} else{
result.text = "Enter a number from 0 up to 5!"
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
if score != 0 {
var score:Int = NSUserDefaults.standardUserDefaults().objectForKey("svScore")! as! Int
userScore.text = "\(score)"
}
if totalGames != 0 {
var totalGames:Int = NSUserDefaults.standardUserDefaults().objectForKey("svTotalGames")! as! Int
userTotal.text = "\(totalGames)"
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
//
//ViewController.swift
//有多少个手指?
//
//由Kevin Nguyen于2015年5月2日创作。
//版权所有(c)2015 Kevin Nguyen。版权所有。
//
导入UIKit
类ViewController:UIViewController{
@IBOutlet var userGuess:UITextField!
@IBOutlet var userScore:UILabel!
@IBOutlet var userTotal:UILabel!
@IBVAR结果:UILabel!
变量分数:Int=0
var totalGames:Int=0
@iAction func resetScore(发件人:AnyObject){
分数=0
userScore.text=“0”
}
@iAction func启动(发送方:AnyObject){
var userGuessInt=userGuess.text.toInt()
var fingers=Int(arc4random_统一(6))
如果应用程序启动时用户猜测,则viewDidLoad
中的分数始终为0
。因此,您将永远不会读取保存的数据(因为您的if
条件)。您还应在尝试使用它之前检查是否存储了数据
这样改变它:
override func viewDidLoad() {
super.viewDidLoad()
if (NSUserDefaults.standardUserDefaults().objectForKey("svScore") != nil) {
score = NSUserDefaults.standardUserDefaults().objectForKey("svScore")! as! Int
}
if score != 0 {
userScore.text = "\(score)"
}
if (NSUserDefaults.standardUserDefaults().objectForKey("svTotalGames") != nil) {
totalGames = NSUserDefaults.standardUserDefaults().objectForKey("svTotalGames")! as! Int
}
if totalGames != 0 {
userTotal.text = "\(totalGames)"
}
}
您可以创建一个HighscoreSaver util类,如下所示:
class HighscoreSaver {
private let defaults = NSUserDefaults.standardUserDefaults()
private let highscoreKey = "highscore-saver-key-item"
private var highscore:Int = 0
private func updateHighscore(score:Int){
highscore += score
if defaults.integerForKey(highscoreKey) < highscore{
defaults.setInteger(highscore, forKey: highscoreKey)
}
}
func add(score scoreToAdd:Int){
updateHighscore(scoreToAdd)
}
func reset(){
defaults.removeObjectForKey(highscoreKey)
}
func currentHighscore() -> Int{
return highscore
}
}
var high = HighscoreSaver()
//Adds scorevalue to current score
high.add(score: yourScoreToAddToCurrent)
//Resets the score to 0
high.reset()
//Gets current score
high.currentHighscore()
考虑一下你的答案。谢谢你的回答。我尝试了代码,起初我真的认为它是有效的。当我打开应用程序时,例如,我从上次打开应用程序时得到了3分,总游戏量为15,然后如果我再次猜到,它就把总游戏重置为0,得分也得到休息,但不是BeFo。We我猜其中一行是对的。那么在我玩游戏时这两个数字会正常上升。怎么办?@kevini15我在使用局部变量和全局变量时犯了一个小错误。我在回答中删除了代码中的两行。请使用更新后的代码重试。我不建议你使用NSUserDefault。使用model/singelton方法代替NSUserDefault,因为e.安全问题。。
var high = HighscoreSaver()
//Adds scorevalue to current score
high.add(score: yourScoreToAddToCurrent)
//Resets the score to 0
high.reset()
//Gets current score
high.currentHighscore()