在 NSUserDefaults 中附加一个数组 Swift

Appending an Array in NSUserDefaults Swift

所以我想在 NSUserDefaults 中附加一个数组,而不是保存一个全新的数组。问题是我希望该数组是某种类型的用户交互的记录历史记录,因此我需要在 NSUserDefaults 中附加一个现有数组,而不是覆盖它。

即不是:

var data = [String]()
var questionsAsked = [String]()

func storeData() {

    let defaults = NSUserDefaults.standardUserDefaults()

    defaults.setObject(questionsAsked, forKey: "questionsAsked")
    defaults.setObject(data, forKey: "data")

    var storedQuestionsAsked = defaults.objectForKey("questionsAsked") as? [String] ?? [String]()

    var storedData = defaults.objectForKey("data") as? [String] ?? [String]()

}

数组基于我的模态,附加是通过将该数组附加到该模态ViewController的

我试过只调用这样的函数,但这只是调用一个空数组,因为它永远不会被重新保存到 NSUserDefaults:

func updateQuestionsAsked(questionAsked: String, answerGiven: String) {

    let defaults = NSUserDefaults.standardUserDefaults()

    defaults.setObject([String](), forKey: "questionsAsked")
    defaults.setObject([String](), forKey: "data")

    var storedQuestionsAsked = defaults.objectForKey("questionsAsked") as? [String] ?? [String]()
    var storedData = defaults.objectForKey("data") as? [String] ?? [String]()

    storedData.append(questionAsked)
    storedQuestionsAsked.append(answerGiven)

    NSUserDefaults.standardUserDefaults().synchronize()
}

我缺少某种同步功能吗?我确信这非常简单,但我只是在犹豫要做什么。谢谢!

您正在为键 "questionsAsked" 和 "data"、

设置空数据
func updateQuestionsAsked(questionAsked: String, answerGiven: String) {

    let defaults = NSUserDefaults.standardUserDefaults()

    //remove this
    //defaults.setObject([String](), forKey: "questionsAsked")
    //defaults.setObject([String](), forKey: "data")

    var storedQuestionsAsked = defaults.objectForKey("questionsAsked") as? [String] ?? [String]()
    var storedData = defaults.objectForKey("data") as? [String] ?? [String]()

    storedData.append(questionAsked)
    storedQuestionsAsked.append(answerGiven)

    // then update whats in the `NSUserDefault`
    defaults.setObject(questionsAsked, forKey: "questionsAsked")
    defaults.setObject(data, forKey: "data")

    // call this after you update
    defaults.synchronize()
}

另一个可能是你在这里设置对象失败...

func storeData() {

    let defaults = NSUserDefaults.standardUserDefaults()

    defaults.setObject(questionsAsked, forKey: "questionsAsked")
    defaults.setObject(data, forKey: "data")

    // call this after setting Objects
    //--
    defaults.synchronize()
    //--

    ...
}