我正在创建一个简单的测验应用。
每当用户完成测验时," ScoreView"显示包含以下内容:
document.getElementById("bbb").nextSibling.data
我在上述' ScoreView"中显示这些数据没有问题。但是,我需要"存储"这些统计数据。
我意识到NSCoding是可行的方法。你是怎么做到的?
非常感谢您的指示,非常感谢!
答案 0 :(得分:0)
仅供一位用户使用吗?如果是这样,您可以使用NSUserDefaults
在ScoreView中
let userDefaults = NSUserDefaults.standardUserDefaults()
如果您想存储为Int,以便将当前与高分进行比较
func saveScoreData(score: Int, ansQs: Int, incAns: Int) {
userDefaults.setInteger(score, forKey: "Score")
userDefaults.setInteger(ansQs, forKey: "AnsweredQuestions")
userDefaults.setInteger(incAns, forKey: "IncorrectAnswers")
userDefaults.synchronized()
}
您可以将其称为保存在您认为最佳的地方。
当您需要检索数据时,您可以使用其键分别调用每个数据。
userDefaults.integerForKey("Score")
保存整数数组
var allScores = [5,6,10]
func addNewScore(scores: [Int], newScore: Int) {
allScores.append(newScore)
defaults.setObject([1,2,3], forKey: "AllScores")
调用它时,需要将其转换为整数数组:
let x = defaults.objectForKey("AllScores") as [Int]
应该这样做。
答案 1 :(得分:0)
NSCoding是一个protcol,可以在数据类上实现,以支持将数据编码和解码为数据缓冲区,然后可以将其保存到磁盘。
第一步是将Score类修改为:
class Score: NSObject, NSCoding {
首先,您将使用名为NSCoder的新类。它负责编码(写入)和解码(读取)数据,以便它可以与NSUserDefaults一起使用。
其次,必须使用required关键字声明新的初始值设定项。这意味着"如果有人试图继承这个类,他们就需要实现这个方法。"使用required的另一种方法是声明您的类永远不能被子类化,称为最终类,在这种情况下,您不需要,因为子类化是不可能的。我们将在这里使用。
将这两个方法添加到Score类:
required init(coder aDecoder: NSCoder) {
totalScore = aDecoder.decodeObjectForKey("totalScore") as! String
totalAnswered = aDecoder.decodeObjectForKey("totalAnswered") as! String
totalIncorrect = aDecoder.decodeObjectForKey("totalIncorrect") as! String
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(totalScore , forKey: "totalScore")
aCoder.encodeObject(totalAnswered , forKey: "totalAnswered")
aCoder.encodeObject(totalIncorrect , forKey: "totalIncorrect")
}
来源: - https://www.hackingwithswift.com/read/12/3/fixing-project-10-nscoding