如何在Swift中使用NSCoding保存测验分数

时间:2016-02-11 02:25:10

标签: ios swift nscoding

我正在创建一个简单的测验应用。

每当用户完成测验时," ScoreView"显示包含以下内容:

document.getElementById("bbb").nextSibling.data

我在上述' ScoreView"中显示这些数据没有问题。但是,我需要"存储"这些统计数据。

我意识到NSCoding是可行的方法。你是怎么做到的?

非常感谢您的指示,非常感谢!

2 个答案:

答案 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