用NSUserDefaults保存高分
我试图保存我的比赛的高分。我试图通过NSUserDefaults
来做到这一点。这是我使用的代码:用NSUserDefaults保存高分
//To save highest score
var highestScore:Int = 20
NSUserDefaults.standardUserDefaults().setObject(highestScore, forKey:"HighestScore")
NSUserDefaults.standardUserDefaults().synchronize()
//To get the saved score
var savedScore: Int = NSUserDefaults.standardUserDefaults().objectForKey("HighestScore") as Int
println(savedScore)
但我得到NSUserDefaults
一个错误说“预期声明”,我想不出如何正确实现这一点。 或者我应该使用NSArchiver
这个吗?如果是这种情况,我怎么能实现这一点?
使用NSCoding。为您的视图控制器创建斯威夫特文件“高分”
import Foundation
class HighScore: NSObject {
var highScore: Int = 0
func encodeWithCoder(aCoder: NSCoder!) {
aCoder.encodeInteger(highScore, forKey: "highScore")
}
init(coder aDecoder: NSCoder!) {
highScore = aDecoder.decodeIntegerForKey("highScore")
}
override init() {
}
}
class SaveHighScore:NSObject {
var documentDirectories:NSArray = []
var documentDirectory:String = ""
var path:String = ""
func ArchiveHighScore(#highScore: HighScore) {
documentDirectories = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
documentDirectory = documentDirectories.objectAtIndex(0) as String
path = documentDirectory.stringByAppendingPathComponent("highScore.archive")
if NSKeyedArchiver.archiveRootObject(highScore, toFile: path) {
println("Success writing to file!")
} else {
println("Unable to write to file!")
}
}
func RetrieveHighScore() -> NSObject {
var dataToRetrieve = HighScore()
documentDirectories = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
documentDirectory = documentDirectories.objectAtIndex(0) as String
path = documentDirectory.stringByAppendingPathComponent("highScore.archive")
if let dataToRetrieve2 = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as? HighScore {
dataToRetrieve = dataToRetrieve2
}
return(dataToRetrieve)
}
}
然后:
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
var Score = HighScore()
override func viewDidLoad() {
super.viewDidLoad()
Score.highScore = 100
SaveHighScore().ArchiveHighScore(highScore: Score)
var retrievedHighScore = SaveHighScore().RetrieveHighScore() as HighScore
println(retrievedHighScore.highScore)
}
}
感谢帮助很多 – 2014-09-23 05:38:38
嗨我实现了代码,但我有使用RetrivedHighScore函数的问题。因为返回类型是NSObject,所以我无法与任何int类型变量进行比较。您如何管理数据以便与Ints进行比较。例如,如何知道当前分数是否高于保存的dataToRetrive变量的分数? – 2014-09-23 06:49:19
您必须将您的highScore作为:retrieveHighScore.highScore。我的方式。对RetrieveHighScore函数的调用是一个NSObject,但您可以通过。访问highScore整数。命名。我可以重写代码来存储没有Object调用的整数,但当前更复杂的方式给你一个函数,你可以添加其他的东西。后来对于任何想要存储多于一个变量的项目,除了整数之外的其他类型都可以埋在NSObject中。 – 2014-09-23 11:36:25
边注:在plist中NSUserDefaults的存储您的数据,这些数据可以很容易地希望提高自己的得分用户改变。就我个人而言,我已经成功地在几个应用程序中给自己无限的代币。尝试找到更好的方式来存储这些数据。 – erdekhayser 2014-09-23 02:01:24